Chapter overview

In this chapter, I focus on the first of my three key questions about the development of representations of mental life: What are the components, or “conceptual units,” that anchor representations of mental life at different points in development? As described in Chapter II, to address this question I draw on data from all of the current studies (Studies 1-4); for details about the methods of these studies, see Chapter II. The goal of this chapter is to provide “snapshots” of the sets of conceptual units available to participants in early childhood, middle childhood, and adulthood.

(Note that this was the primary planned analysis for all of the studies included in this dissertation; see, e.g., Weisman et al., 2017.)

General analysis plan

High-level overview

In analyzing these datasets with an eye toward identifying “conceptual units,” the basic insight is that tracking the covariance of mental capacity attributions provides a way of discovering suites of mental capacities that “hang together” in reasoning about mental life, and that these suites of mental capacities might correspond to the units of some larger conceptual representation of this general domain. To borrow an example from Chapter II: If participants who endorse Capacity X also tend to endorse Capacities Y and Z, this provides some evidence that Capacities X, Y, and Z constitute a suite of mental capacities that are closely associated with the same underlying “conceptual unit.”

In other words, my goal in the current chapter is to uncover a set of latent constructs—“conceptual units”—that could have given rise to the correlations among mental capacity attributions as observed in a given group of participants. A canonical way to identify latent constructs via observed correlations is exploratory factor analysis (EFA), a form of dimensionality reduction that posits that the observed variables in a given dataset are related, to varying degrees, to a smaller set of unobserved “factors”; and that individual observations of each of these variables reflect a combination of (a) the state of these latent factors, (b) a particular variable’s relationship to each of these latent factors, and (c) noise. Following this logic, I posit that, for any of the current datasets, the many mental capacities included in that dataset are related, to varying degrees, to a smaller set of latent “conceptual units”; and that a participant’s attributions of each of these mental capacities to a particular target character reflect a combination of (a) the participant’s beliefs about the extent to which these conceptual units apply to that target character, (b) each mental capacity’s relationships to each of the conceptual units, and (c) noise. In other words, one way to identify conceptual units for a particular sample of interest (e.g., US adults; children of different age groups) is to conduct an EFA over participants’ mental capacity attributions and treat the resulting “factors” as candidate conceptual units.

Details of analyses

In the remainder of this chapter, I report EFAs for each age group included in each of the current studies (Studies 1-4). Conducting an EFA requires making a variety of analysis choices, including how to handle missing data, what kind of correlations to use, the choice of factoring algorithm, how to determine the number of factors to retain, the choice of rotation method (if any), and the method for calculating factor scores. In the analysis code for this chapter I have included easy short cuts for the interested reader to explore different options for each of these parameters. Here, I have set all of these parameters to be constant across EFAs of different samples so as to maximize comparability across studies. To conduct these EFAs, I use the “psych” package for R (Revelle, 2018).

Missing data

For all EFAs, I impute missing trial-level data (e.g., skipped trials among child participants) using the median response for that mental capacity among other participants who evaluated the same target character. For example, if an 8-year-old participant in the “beetle” condition failed to provide a response to a question about a beetle’s capacity for happiness, I fill in this datapoint with the median response to the happiness question among all other children from the 7- to 9-year-old age group for that study who evaluated the beetle (ignoring responses from other age groups, and ignoring children who evaluated some other target character). Across all studies, fewer than 1.65% of trials in any age group were missing data. In my judgment, the advantages of retaining the most participants per sample (particularly for EFA, which is highly sensitive to sample size) justify imputing values for this small number of missing datapoints.

Correlation type

I conduct analyses over Pearson correlations among mental capacity attributions, using pairwise complete observations. In principle, polychoric correlations are better suited to handle responses on the three-point scales employed in Studies 2-4; however, in my experience with these data, conducting EFAs with polychoric correlations instead of Pearson correlations tends to generate errors further down the analysis pipeline (e.g., generating correlation matrices that are not positive definite) and appears to be somewhat vulnerable to over-fitting (e.g., suggesting retaining six or more factors that each account for only a very small amount of the shared variance).

Factoring algorithm

I use ordinary least squares to find the minimum residual solution, which is robust to a variety of ways that matrices can be “badly behaved” (see Revelle, 2018). While this dissertation does not include a systematic exploration of all of the factoring algorithms available when conducting EFA, in my casual explorations of the various algorithms available I have yet to observe any substantial differences to the number of factors retained or to the resulting solutions that would change the interpretations offered here.

Factor retention protocol

I examine the results of three factor retention protocols: (1) Parallel Analysis, which compares the observed correlation structure to the correlation structure arising from random datasets of the same size; (2) Minimizing the Bayesian Information Criterion (BIC), which is one method of optimizing both goodness of fit and parsimony; and (3) The factor retention protocol reported in the original publication of Study 1 (Weisman et al., 2017), which specifies extracting the maximal number of factors according to an analysis of degrees of freedom and retaining factors that meet all three of the following criteria: (a) have eigenvalues >1.00, (b) individually account for >5% of the shared variance before rotation, and (c) are the “dominant” factor (the factor with the strongest absolute factor loading) for at least 1 mental capacity after rotation.

For each study, my interpretation of how best to characterize the dataset (i.e., how many factors I observed) is determined by the degree of consensus among these three protocols and by the interpretability of the retained factors under each protocol (e.g., the percent of shared variance explained by each factor, the strength of factor loadings for each factor, and my subjective assessment of the ease with which I can identify the “latent construct” captured by each factor). See Table 3.1 for the results of all factor retention protocols for all studies and samples. In the main text of this chapter, I focus on just one or two solutions (see Table 3.1, rightmost column); any suggested solutions that are not discussed in this chapter can be found in Appendix A.

Rotation

To maximize interpretability, I present varimax-rotated solutions, in which factors are constrained to be orthogonal (i.e., inter-factor correlations are constrained to be 0) and rotated to maximize the sum of the variances of the squared factor loadings with the goal of achieving “simple structure” (Thurstone, 1949). For unrotated solutions and solutions applying oblique (“oblimin”) transformations, in which factors are allowed to correlate, see Appendix A.

Factor scores

I use the method developed by ten Berge, Krijnen, Wansbeek, & Shapiro (1999) to calculate factor scores, as suggested by Revelle (2018). (I include this parameter here for completeness; this chapter does not include any analyses of factor scores.)

Study 1: An adult endpoint

In the context of this dissertation, Study 1 serves the role of describing a developmental endpoint for conceptual representations of mental life. In this chapter, I focus on what these studies can reveal about the fundamental components of this representation: What are the conceptual units available to US adults in reasoning about the mental lives of various beings in the world?

An in-depth analysis and discussion of these results is provided in the original publication of these studies (Weisman et al., 2017). Here I present these analyses anew, with slight tweaks to the analysis pipeline to maximize comparability to Studies 2-4—namely, examining multiple factor retention protocols (rather than only one), and recoding the response scale used in these studies to begin at 0 (rather than being centered at 0).

Special notes on data processing and analysis

As noted in Chapter II, in the original analysis of Studies 1a-1d responses were recoded to run from -3 to +3 before analyses (Weisman et al., 2017); in this dissertation, I maintain the 0-6 coding for comparability to Studies 2-4.

Finally, on Study 1c, participants assessed two target characters side by side (in contrast to Studies 1a, 1b, and 1d, in which each participant assessed just one target character). In the current analyses (as in the original publication of these results; Weisman et al., 2017), I treat each participant’s assessments of each target character as a separate set of observations (as if they came from different participants), in effect doubling the sample size for these studies (but ignoring the within-subject design).

Results

Study 1a

In Study 1a, 405 US adults each assessed a single target character on 40 mental capacities. This study employed the “edge case” variant of the general approach, with participants randomly assigned to assess either a beetle or a robot. (See Chapter II and Weisman et al., 2017, for detailed methods.)

How many conceptual units?

Two of the three protocols for determining how many factors to retain (parallel analysis and the factor retention criteria reported in the original publication of Study 1; Weisman et al., 2017) suggested retaining three factors, while the third (minimizing BIC) suggested retaining five factors; see Table 3.1.

Three of the five factors suggested by minimizing BIC were qualitatively very similar to the three factors suggested by the other protocols, and even in the 5-factor solution these three factors together accounted for fully 94% of the shared variance. The fourth and fifth factors each accounted for <4% of the shared variance, and neither was the dominant factor for any of the 40 mental capacities included in this study. Indeed, factor loadings for these two factors were all quite weak (absolute loadings all <0.33). Given all this, I will limit my interpretations to the three-factor solution; see Appendix A for the 5-factor solution.

Table 3.1: Number of factors suggested by three factor retention protocols: parallel analysis, minimizing BIC, and the factor retention criteria specified in Weisman et al. (2017). Results are grouped by study and age group. The final column gives the focus of my interpretation in Chapter III; see Appendix A for additional solutions not reported in this chapter.
Parallel analysis Minimizing BIC Weisman et al. (2017) Focus of interpretation
Study 1: An adult endpoint
1a 3 5 3 3-factor solution
1b 3 4 3 3-factor solution
1c 3 4 3 3-factor solution
1d 4 5 3 3-factor solution
Study 2: Conceptual change between middle childhood (7-9y) and adulthood
Adults 4 3 3 3- and 4-factor solutions
Children (7-9y) 3 3 3 3-factor solution
Study 3: Conceptual change over early and middle childhood (4-9y)
Adults 3 4 3 3-factor solution
Older children (7-9y) 3 3 3 3-factor solution
Younger children (4-6y) 2 1 3 2- and 3-factor solutions
Study 4: A focus on early childhood (4-5y)
Adults 3 3 3 3-factor solution
Children (4-5y) 3 1 4 3- and 4-factor solutions

What are these conceptual units?

After rotation, the first factor corresponded primarily to physiological sensations related to biological needs—a suite of capacities that I will refer to as BODY (a label employed in the original reporting of this study; Weisman et al., 2017). It was the dominant factor for such items as getting hungry, experiencing pain, feeling tired, and experiencing fear, and accounted for 41% of the shared variance in the rotated three-factor solution, and 25% of the total variance in participants’ mental capacity attributions.

The second factor corresponded primarily to capacities for self- and other-relevant emotions—a suite of capacities that I will refer to as HEART (as in Weisman et al., 2017). It was the dominant factor for such items as feeling embarrassed, experiencing pride, feeling love, and experiencing guilt, and accounted for 39% of the shared variance in the rotated three-factor solution, and 24% of the total variance in participants’ mental capacity attributions.

The third factor corresponded primarily to perceptual-cognitive abilities to detect and use information about the environment—a suite of capacities that I will refer to as MIND (as in Weisman et al., 2017). It was the dominant factor for such items as remembering things, recognizing someone, sensing temperatures, and communicating with others, and accounted for 21% of the shared variance in the rotated three-factor solution, and 13% of the total variance in participants’ mental capacity attributions.

Together, these three factors accounted for 62% of the total variance in participants’ mental capacity attributions.

See Figure 3.1 for all factor loadings.

Study 1b

Study 1b was a direct replication of Study 1a: 406 US adults each assessed a single target character (either a beetle or a robot) on 40 mental capacities. (See Chapter II and Weisman et al., 2017, for detailed methods.)

How many conceptual units?

Two of the three protocols for determining how many factors to retain (parallel analysis and the factor retention criteria reported in the original publication of Study 1; Weisman et al., 2017) suggested retaining three factors, while the third (minimizing BIC) suggested retaining four factors; see Table 3.1.

Three of the four factors suggested by minimizing BIC were qualitatively very similar to the three factors suggested by the other protocols, and together accounted for fully 96% of the shared variance. The fourth factor accounted for only 4% of the shared variance, and was not the dominant factor for any of the 40 mental capacities included in this study, with weak loadings for all capacities (absolute loadings all <0.35).

Given all this, I will again focus the remainder of my analyses on the three-factor solution; see Appendix A for the four-factor solution.

What are these conceptual units?

After rotation, the first factor corresponded primarily to the physiological sensations that I labeled BODY in Study 1a (see also Weisman et al., 2017). It was the dominant factor for such items as getting hungry, experiencing pain, feeling tired, and experiencing fear, and accounted for 42% of the shared variance in the rotated three-factor solution, and 25% of the total variance in participants’ mental capacity attributions.

The second factor corresponded primarily to the social-emotional abilities that I labeled HEART in Study 1a (see also Weisman et al., 2017). It was the dominant factor for such items as experiencing guilt, experiencing pride, feeling embarrassed, and feeling disrespected, and accounted for 35% of the shared variance in the rotated three-factor solution, and 21% of the total variance in participants’ mental capacity attributions.

The third factor corresponded primarily to the perceptual-cognitive abilities that I referred to as MIND in Study 1a (see also Weisman et al., 2017). It was the dominant factor for such items as communicating with others, detecting sounds, remembering things, and working toward a goal, and accounted for 23% of the shared variance in the rotated three-factor solution, and 14% of the total variance in participants’ mental capacity attributions.

Together, these three factors accounted for 59% of the total variance in participants’ mental capacity attributions.

See Figure 3.1 for all factor loadings.

Study 1c

In Study 1c, 200 US adults each assessed two target characters on 40 mental capacities. Like Studies 1a and 1b, this study employed the “edge case” variant of the general approach; but in this study, all participants assessed both of these target characters side by side (with left-right position counterbalanced across participants). (See Chapter II and Weisman et al., 2017, for detailed methods.)

How many conceptual units?

The factor retention criteria reported in the original publication of Study 1 (Weisman et al., 2017) suggested retaining three factors, while the other two protocols for determining how many factors to retain (parallel analysis and minimizing BIC) suggested retaining four factors; see Table 3.1.

Much as in Studies 1a and 1b, three of the four factors suggested by parallel analysis and minimizing BIC were qualitatively very similar to the three factors suggested by the original factor retention criteria, and together accounted for fully 96% of the shared variance. The fourth factor accounted for only 4% of the shared variance and was not the dominant factor for any of the 40 mental capacities included in this study, with weak factor loadings for all capacities (absolute loadings all <0.34). Given all this, I will again focus the remainder of my analyses on the three-factor solution; see Appendix A for the four-factor solution.

What are these conceptual units?

After rotation, the first factor corresponded primarily to the physiological sensations that I labeled BODY in Studies 1a and 1b (see also Weisman et al., 2017). It was the dominant factor for such items as getting hungry, experiencing pain, feeling tired, and experiencing fear, and accounted for 42% of the shared variance in the rotated three-factor solution, and 25% of the total variance in participants’ mental capacity attributions.

The second factor corresponded primarily to the social-emotional abilities that I labeled HEART in Studies 1a and 1b (see also Weisman et al., 2017). It was the dominant factor for such items as experiencing pride, experiencing guilt, feeling disrespected, and feeling embarrassed, and accounted for 38% of the shared variance in the rotated three-factor solution, and 23% of the total variance in participants’ mental capacity attributions.

The third factor corresponded primarily to the perceptual-cognitive abilities that I referred to as MIND in Studies 1a and 1b (see also Weisman et al., 2017). It was the dominant factor for such items as detecting sounds, remembering things, recognizing someone, and communicating with others, and accounted for 20% of the shared variance in the rotated three-factor solution, and 12% of the total variance in participants’ mental capacity attributions.

Together, these three factors accounted for 60% of the total variance in participants’ mental capacity attributions.

See Figure 3.1 for all factor loadings.

Study 1d

In Study 1d, 431 US adults each assessed a single target character on 40 mental capacities. Unlike Studies 1a-1c, this study employed the “many characters” variant of the general approach, in which participants were randomly assigned to assess one of the following 21 target characters: an adult, a child, an infant, a person in a persistent vegetative state, a fetus, a chimpanzee, an elephant, a dolphin, a bear, a dog, a goat, a mouse, a frog, a blue jay, a fish, a beetle, a microbe, a robot, a computer, a car, or a stapler. (See Chapter II and Weisman et al., 2017, for detailed methods.)

How many conceptual units?

Each of the three factor retention protocols suggested a different number of factors to retain; see Table 3.1.

The retention criteria used in the original reporting of this study (Weisman et al., 2017) suggested retaining three factors.

Parallel analysis suggested retaining four factors. However, three of these four factors were qualitatively very similar to the three factors suggested by Weisman et al.’s (2017) original retention criteria, and together accounted for fully 98% of the shared variance. The fourth factor accounted for only 2% of the shared variance and was not the dominant factor for any of the 40 mental capacities included in this study, with weak loadings for all capacities (absolute loadings all <0.31).

Likewise, minimizing BIC suggested retaining five factors, but three of these five factors were qualitatively very similar to the three factors suggested by the original retention criteria, and together accounted for fully 94% of the shared variance. The fourth and fifth factors each accounted for <4% of the shared variance, and neither was the dominant factor for any of the 40 mental capacities included in this study. Indeed, factor loadings for these two factors were all quite weak (absolute loadings all <0.38).

Given all this, I will once more focus the remainder of my analyses on the three-factor solution; see Appendix A for the 4- and 5-factor solutions.

What are these conceptual units?

After rotation, the first factor corresponded primarily to the physiological sensations that I labeled BODY in Studies 1a-1c (see also Weisman et al., 2017). It was the dominant factor for such items as experiencing pain, feeling tired, getting hungry, and experiencing fear, and accounted for 41% of the shared variance in the rotated three-factor solution, and 31% of the total variance in participants’ mental capacity attributions.

The second factor corresponded primarily to the social-emotional abilities that I labeled HEART in Studies 1a-1c (see also Weisman et al., 2017). It was the dominant factor for such items as holding beliefs, experiencing guilt, feeling embarrassed, and telling right from wrong, and accounted for 34% of the shared variance in the rotated three-factor solution, and 25% of the total variance in participants’ mental capacity attributions.

The third factor corresponded primarily to the perceptual-cognitive abilities that I referred to as MIND in Studies 1a-1c (see also Weisman et al., 2017). It was the dominant factor for such items as detecting sounds, sensing temperatures, communicating with others, and remembering things, and accounted for 25% of the shared variance in the rotated three-factor solution, and 19% of the total variance in participants’ mental capacity attributions.

Together, these three factors accounted for 74% of the total variance in participants’ mental capacity attributions.

See Figure 3.1 for all factor loadings.

Discussion

The general pattern that emerged from Studies 1a-1d is clear and appears to be highly reliable: In four large-scale studies, US adults’ mental capacity attributions were anchored by a three-way distinction between the physiological sensations of the BODY, the social-emotional abilities of the HEART, and the perceptual-cognitive abilities of the MIND. Given the range of mental capacities included in each study, a number of additional or alternative factors could have emerged (including “experience” or “agency,” as in Gray et al.’s 2007 work on mind perception). Nonetheless, a common set of factors—i.e., a stable set of “conceptual units”—emerged across independent analyses of four studies, whether participants judged a single “edge case” target character in isolation (Studies 1a and 1b), compared two “edge cases” that highlighted a contrast in biological animacy (Study 1c), or evaluated a diverse range of target characters, from inert objects to canonical social partners (Study 1d).For an extended discussion of these results, see Weisman et al. (2017).

Studies 1a-1d provide a clear developmental endpoint for this aspect of conceptual representations of mental life: As a group, US adults appear to have access to three fundamental conceptual units—BODY, HEART, and MIND—when reasoning about the mental lives of various beings in the world. Studies 2-4 were designed to explore the developmental trajectory that leads up to this endpoint: How do US children come to represent mental life in this way?

Study 2: Conceptual change between middle childhood (7-9y) and adulthood

Study 2 provides a first glimpse of the emergence of conceptual representations of mental life prior to adulthood. In this chapter, I focus on the fundamental components of this representation: What are the conceptual units available to US children in reasoning about the mental lives of various beings in the world, and how do they compare to those available to US adults (as revealed in Study 1)?

Pursuing this question with children required developing an age-appropriate experimental paradigm. In particular, the wording of some of the 40 mental capacities employed in Study 1 was modified to use more age-appropriate vocabulary, and participants responded on a three-point scale (“no,” coded as 0; “kinda,” coded as 0.5, “yes,” coded as 1), , rather than a seven-point scale. Study 2 employed the “edge case” variant of the general approach, with participants randomly assigned to assess either a beetle or a robot. As in Studies 1a, 1b, and 1d, in Study 2 each participant assessed a single target character on all 40 mental capacities. To validate the modified paradigm (i.e., to assess whether this paradigm produced similar results to Study 1), and to provide a direct comparison for child participants, participants included a sample of 200 US adults. As an initial foray into exploring development in this domain, the child sample consisted of 200 US children between the ages of 7.01-9.99y (median: 8.31y). (See Chapter II for detailed methods.)

Results

Adults

How many conceptual units?

Two of the three protocols for determining how many factors to retain (minimizing BIC and the factor retention criteria employed in the original publication of Study 1; Weisman et al., 2017) suggested retaining three factors, while the third (parallel analysis) suggested retaining four factors; see Table 3.1. Unlike in Studies 1a-1d, in which factors beyond the first three uniformly accounted for very small amounts of the shared variance, were not the dominant factor for any mental capacities, and tended to have weak factor loadings for all mental capacities, none of these considerations clearly rules out the fourth factor suggested by parallel analysis. Given this, I will present and interpret both three- and four-factor solutions.

What are these conceptual units?

Three-factor solution

First, I will examine the three-factor solution suggested by minimizing BIC and by the factor retention criteria employed in the original publication of Study 1 (Weisman et al., 2017). Importantly, this is the number of factors retained among US adults in all of my previous studies with US adults (Studies 1a-1d).

After rotation, the first factor corresponded primarily to the social-emotional abilities that I labeled HEART in Study 1 (see also Weisman et al., 2017). It was the dominant factor for such items as feel proud, feel joy, feel sad, and feel happy, and accounted for 37% of the shared variance in the rotated three-factor solution, and 18% of the total variance in participants’ mental capacity attributions.

The second factor corresponded primarily to the physiological sensations that I labeled BODY in Study 1 (see also Weisman et al., 2017). It was the dominant factor for such items as get hungry, feel pain, feel scared, and feel tired, and accounted for 37% of the shared variance in the rotated three-factor solution, and 18% of the total variance in participants’ mental capacity attributions.

The third factor corresponded primarily to the perceptual-cognitive abilities that I referred to as MIND in Study 1 (see also Weisman et al., 2017). It was the dominant factor for such items as figure out how to do things, make choices, recognize somebody else, and sense whether something is close by or far away, and accounted for 25% of the shared variance in the rotated three-factor solution, and 12% of the total variance in participants’ mental capacity attributions.

Together, these three factors accounted for 48% of the total variance in participants’ mental capacity attributions.

See Figure 3.2 for all factor loadings.

Four-factor solution

In the four-factor solution suggested by parallel analysis, after rotation, the first factor corresponded primarily to physiological sensations (BODY). It was the dominant factor for such items as get hungry, feel pain, feel scared, and feel tired, and accounted for 34% of the shared variance in the rotated four-factor solution, and 17% of the total variance in participants’ mental capacity attributions.

The second factor corresponded primarily to the social-emotional abilities (HEART). It was the dominant factor for such items as feel joy, feel proud, feel sad, and feel love, and accounted for 33% of the shared variance in the rotated four-factor solution, and 17% of the total variance in participants’ mental capacity attributions.

The third factor corresponded primarily to the more “cognitive” and “agentic” of the perceptual-cognitive abilities that I have been referring to as MIND. It was the dominant factor for such items as decide what to do, have thoughts, make choices, and figure out how to do things, and accounted for 19% of the shared variance in the rotated four-factor solution, and 10% of the total variance in participants’ mental capacity attributions.

The fourth factor corresponded primarily to the more “perceptual” of the perceptual-cognitive abilities that I have been referring to as MIND. It was the dominant factor for such items as hear sounds, sense temperatures, see things, and sense whether something is close by or far away, and accounted for 13% of the shared variance in the rotated four-factor solution, and 7% of the total variance in participants’ mental capacity attributions.

Together, these four factors accounted for 51% of the total variance in participants’ mental capacity attributions.

See Figure 3.2 for all factor loadings.

Interim discussion

Two of the three factor retention protocols suggested a three-factor solution, which was characterized by a distinction between BODY, HEART, and MIND. This three-factor structure is highly similar to the three-factor structures revealed by Studies 1a-1d, suggesting that the child-friendly paradigm developed for Study 2 was valid: Providing adult participants with more “child-friendly” items to assess using a three-point (rather than seven-point) response scale elicited the same conceptual units that have been revealed by more complex, “adult-friendly” experimental paradigms.

Meanwhile, I would summarize the four-factor solution suggested by parallel analysis as a slight variant on this three-factor solution—again characterized by distinct constructs of BODY and HEART but including a further differentiation of the suite of mental capacities I have referred to as MIND into cognitive/agentic abilities (e.g., thinking, choosing, reasoning, planning) vs. perceptual abilities (e.g., hearing, seeing, sensing). Reanalyzing Studies 1a-1d using different EFA parameters (in particular, retaining more factors and examining an oblique transformation of EFA solutions rather than an orthogonal rotation) provides some converging evidence for this cognitive/agentic vs. perception distinction in the correlation structure of US adults’ mental capacity attributions; see Appendix A. However, this distinction does not appear to be robust enough to emerge reliably across studies and analysis decisions in the kinds of experimental paradigms employed in this dissertation.

Children (7-9y)

How many conceptual units?

All three protocols for determining how many factors to retain suggested retaining three factors; see Table 3.1.

What are these conceptual units?

After rotation, the first factor corresponded primarily to social-emotional abilities. An analysis of factor congruence with the three-factor solution among adults confirmed that this factor was most similar to adults’ HEART factor (cosine similarity with HEART: 0.97; with MIND: 0.42; with BODY: 0.41). It was the dominant factor for such items as feel proud, feel happy, feel joy, and get hurt feelings, and accounted for 50% of the shared variance in the rotated three-factor solution, and 18% of the total variance in participants’ mental capacity attributions.

The second factor corresponded primarily to physiological sensations. An analysis of factor congruence confirmed that this factor was most similar to adults’ BODY factor (cosine similarity with BODY: 0.91; with HEART: 0.26; with MIND: 0.03). It was the dominant factor for such items as get hungry, feel pain, smell things, and feel scared, and accounted for 30% of the shared variance in the rotated three-factor solution, and 11% of the total variance in participants’ mental capacity attributions.

The third factor corresponded primarily to perceptual-cognitive abilities. An analysis of factor congruence confirmed that this factor was most similar to adults’ MIND factor (cosine similarity with MIND: 0.94; with HEART: 0.35; with BODY: 0.01). It was the dominant factor for such items as be aware of itself, be aware of things, figure out how to do things, and sense whether something is close by or far away, and accounted for 20% of the shared variance in the rotated three-factor solution, and 7% of the total variance in participants’ mental capacity attributions.

Together, these three factors accounted for 35% of the total variance in participants’ mental capacity attributions.

See Figure 3.2 for all factor loadings, and Table 3.2 for cosine similarities between child and adult factors.

In sum, like adults in Study 1, and like the three-factor solution for adults in the current study, 7- to 9-year-old children’s mental capacity attributions were dominated by a three-way distinction between physiological, social-emotional, and perceptual-cognitive abilities—i.e., BODY, HEART, and MIND.

Discussion

Exploratory factor analyses suggested that by middle childhood (7-9y), the conceptual structure underlying US children’s attributions of mental life is very similar to that of US adults, anchored by suites of mental capacities related to BODY (physiological sensations), HEART (social-emotional abilities), and MIND (perceptual-cognitive abilities). In principle, a number of additional or alternative latent factors could have emerged from the factor analysis of children’s responses. For example, children might have distinguished primarily between internal “experience” and external action or “agency” (Gray et al., 2007), or they might have demonstrated finer-grained groupings of mental capacities based on phrasing, rote knowledge, etc. Instead, the latent conceptual structure underlying children’s responses appears to be very similar to that of adults, both in this study and in Weisman et al.’s (2017) previous work. In other words, any dramatic developmental changes to this conceptual structure likely occur prior to the age of 7y.

Study 3: Conceptual change over early and middle childhood (4-9y)

Study 3 continues my exploration of the emergence of conceptual representations of mental life in childhood. Again, in this chapter, I focus in particular on the fundamental components of this representation: What are the conceptual units available to US children at different points in development, and how might this aspect of conceptual representation change?

In Study 3, I aimed to extend my findings with 7- to 9-year-old children in Study 2 by expanding the list of the target characters to include not only the two “edge cases” from Study 2 (a beetle and a robot), but a also a wider range of animate beings (a bird, a goat, and an elephant) and inanimate objects (a computer, a teddy bear, and a doll)—in other words, employing the “diverse characters” (rather than “edge case”) variant of the overall approach. In Study 1, these two approaches yielded very similar pictures of the conceptual units available to adults (see also Weisman et al., 2017). I reasoned that if this three-part conceptual structure is stable and robust by the age of 7-9y, it should manifest among 7- to 9-year-old children under the same range of conditions that it does among adults.

This study also provides a first glimpse of the earlier development of conceptual structure in a group of younger children. I targeted 4- to 6-year-old children for the younger age group because this has been identified as a period of dramatic development in several relevant domains. Many studies have documented shifts in children’s abilities to take others’ perspectives, represent false beliefs, and integrate representations of intentions and outcomes in evaluating moral responsibility (for reviews, see Flavell, 1999; Wellman, 2015). The preschool years have also been the focus of a rich tradition of work on lay biology and the animate-inanimate distinction extending back nearly a century (e.g., Carey, 1985; R. Gelman, Spelke, & Meck, 1983; Medin, Waxman, Woodring, & Washinawatok, 2010; Piaget, 1929; for a review, see S. Gelman & Opfer, 2002). All of these accounts make the case that becoming a sophisticated reasoner—and particularly a sophisticated social reasoner—requires substantial refinement of one’s representations of others’ experiences, beliefs, desires, and needs. Might these refinements include changes to the structure of children’s concepts of mental life—in particular, the conceptual units available to children when reasoning about other beings?

Participants in Study 3 each assessed a single target character on 20 mental capacities. Participants were randomly or pseudo-randomly assigned to assess either one of the following 9 characters: an elephant, a goat, a mouse, a bird, a beetle, a teddy bear, a doll, a robot, or a computer. To make the study appropriate for children as young as 4y of age, participants assessed a subset of the 40 mental capacities employed in Study 2, chosen to represent the three “conceptual units” revealed by Studies 1 and 2 (BODY, HEART, and MIND) and to cover a similar range of mental capacities as Studies 1 and 2. As in Study 2, participants responded on a three-point scale (“no,” coded as 0; “kinda,” coded as 0.5, “yes,” coded as 1).

To validate the modified paradigm (i.e., to assess whether this paradigm produced similar results to Studies 1 and 2), and to provide a direct comparison for child participants, participants included a sample of 116 US adults, as well as a sample of 125 “older” children (7.08-9.98y; median: 8.56y), and a sample of 124 “younger” children (4-6.98y; median: 5.03y). (See Chapter II for detailed methods.)

Results

Adults

How many conceptual units?

Two of the three protocols for determining how many factors to retain (parallel analysis and the factor retention criteria employed in the original publication of Study 1; Weisman et al., 2017) suggested retaining three factors, while the third (minimizing BIC) suggested retaining four factors; see Table 3.1.

Three of the four factors suggested by minimizing BIC were qualitatively very similar to the three factors suggested by the other protocols, and together accounted for fully 94% of the shared variance. The fourth factor accounted for only 6% of the shared variance, was the dominant factor for only one of the 40 mental capacities included in this study (feel happy), and had moderately weak factor loadings for all other capacities (absolute loadings <0.43). Given all this, I will again focus the remainder of my analyses on the three-factor solution; see Appendix A for the four-factor solution.

What are these conceptual units?

After rotation, the first factor corresponded primarily to the physiological sensations that I labeled BODY in Studies 1 and 2 (see also Weisman et al., 2017). It was the dominant factor for such items as feel pain, get hungry, feel tired, and smell things, and accounted for 38% of the shared variance in the rotated three-factor solution, and 29% of the total variance in participants’ mental capacity attributions.

The second factor corresponded primarily to the social-emotional abilities that I labeled HEART in Studies 1 and 2 (see also Weisman et al., 2017). It was the dominant factor for such items as feel guilty, get hurt feelings, feel embarrassed, and feel proud, and accounted for 33% of the shared variance in the rotated three-factor solution, and 26% of the total variance in participants’ mental capacity attributions.

The third factor corresponded primarily to the perceptual-cognitive abilities that I referred to as MIND in Studies 1 and 2 (see also Weisman et al., 2017). It was the dominant factor for such items as sense whether something is close by or far away, sense temperatures, figure out how to do things, and be aware of things, and accounted for 29% of the shared variance in the rotated three-factor solution, and 23% of the total variance in participants’ mental capacity attributions.

Together, these three factors accounted for 78% of the total variance in participants’ mental capacity attributions.

See Figure 3.3 for all factor loadings.

In sum, as in Study 1 and the three-factor solution for Study 2, the conceptual structure revealed by this analysis among adults was characterized by a three-way distinction between BODY, HEART, and MIND. This suggests that the modified child-friendly paradigm developed for Study 3 was valid: Using a shorter list of items and a wider range of target characters elicited the same three conceptual units, among US adults, that was revealed in Studies 1 and 2.

Older children (7-9y)

How many conceptual units?

As was the case among this age group in Study 2, all three factor retention protocols suggested retaining three factors; see Table 3.1.

What are these conceptual units?

After rotation, the first factor corresponded primarily to physiological sensations. An analysis of factor congruence confirmed that this factor was most similar to adults’ BODY factor (cosine similarity with BODY: 0.97; with HEART: 0.65; with MIND: 0.63). It was the dominant factor for such items as get hungry, feel scared, feel pain, and smell things, and accounted for 39% of the shared variance in the rotated three-factor solution, and 21% of the total variance in participants’ mental capacity attributions.

The second factor corresponded primarily to social-emotional abilities. An analysis of factor congruence confirmed that this factor was most similar to adults’ HEART factor (cosine similarity with HEART: 0.98; with BODY: 0.66; with MIND: 0.48). It was the dominant factor for such items as feel guilty, feel proud, feel embarrassed, and feel sad, and accounted for 35% of the shared variance in the rotated three-factor solution, and 19% of the total variance in participants’ mental capacity attributions.

The third factor corresponded primarily to perceptual-cognitive abilities. An analysis of factor congruence confirmed that this factor was most similar to adults’ MIND factor (cosine similarity with MIND: 0.96; with BODY: 0.62; with HEART: 0.47). It was the dominant factor for such items as figure out how to do things, make choices, remember things, and sense temperatures, and accounted for 26% of the shared variance in the rotated three-factor solution, and 14% of the total variance in participants’ mental capacity attributions.

Together, these three factors accounted for 54% of the total variance in participants’ mental capacity attributions.

See Figure 3.3 for all factor loadings, and Table 3.2 for cosine similarities between child and adult factors.

I consider this to be a close conceptual replication of Study 1, suggesting that by the age of 7-9y, this three-part conceptual structure is stable and robust to a range of experimental conditions.

Younger children (4-6y)

How many conceptual units?

Each of the three factor retention protocols suggested a different number of factors to retain; see Table 3.1.

Minimizing BIC suggested a null solution consisting of a single factor; in other words, this protocol indicated that the correlation structure of younger children’s responses provided no evidence for distinct latent constructs.

Meanwhile, parallel analysis suggested retaining two factors, and the retention criteria employed in the original publication of Study 1; Weisman et al., 2017) suggested retaining three factors. In both the two- and three-factor solutions, each factor accounted for a substantial amount of the shared variance, was the dominant factor for several mental capacities, and had strong factor loadings for some subset of mental capacities.

Given all this, I will present and interpret both two- and three-factor solutions; see Appendix A for the null, one-factor solution suggested by minimizing BIC.

What are these conceptual units?

Two-factor solution

First, I will examine the two-factor solution suggested by parallel analysis.

After rotation, the first factor encompassed both physiological sensations and emotions. An analysis of factor congruence indicated that this factor was most similar to adults’ BODY factor, but was also quite similar to adults’ HEART factor (cosine similarity with BODY: 0.93; with HEART: 0.88; with MIND: 0.70). It was the dominant factor for such items as get hungry, feel sick, feel happy, and get angry, and accounted for 65% of the shared variance in the rotated two-factor solution, and 25% of the total variance in participants’ mental capacity attributions.

The second factor corresponded primarily to perceptual-cognitive abilities, as well as one complex negative emotion (feel guilty). An analysis of factor congruence confirmed that this factor was most similar to adults’ MIND factor (cosine similarity with MIND: 0.94; with BODY: 0.73; with HEART: 0.70). It was the dominant factor for such items as sense temperatures, remember things, feel guilty, and sense whether something is close by or far away, and accounted for 35% of the shared variance in the rotated two-factor solution, and 14% of the total variance in participants’ mental capacity attributions.

Together, these two factors accounted for 39% of the total variance in participants’ mental capacity attributions.

See Figure 3.3 for all factor loadings, and Table 3.2 for cosine similarities between child and adult factors.

In relation to the BODY-HEART-MIND structure found among older children and adults, I would describe this two-factor structure as being anchored by a contrast between the more abstract, cognitive capacities of the MIND vs. a set of warmer, more visceral experiences that constitute a more integrated representation of BODY-HEART.

Three-factor solution

I will now turn to the three-factor solution suggested by the factor retention criteria employed in the original publication of Study 1 (Weisman et al., 2017). Importantly, this is also the number of factors retained among US adults and older children in this study.

After rotation, the first factor corresponded primarily to physiological sensations, as well as some positive emotions. An analysis of factor congruence indicated that this factor was most similar to adults’ BODY factor, but was also quite similar to adults’ HEART factor (cosine similarity with BODY: 0.92; with HEART: 0.81; with MIND: 0.70). It was the dominant factor for such items as get angry, get hungry, get hurt feelings, and feel tired, and accounted for 40% of the shared variance in the rotated three-factor solution, and 17% of the total variance in participants’ mental capacity attributions.

The second factor corresponded primarily to perceptual-cognitive abilities, as well as one complex negative emotion (feel guilty). An analysis of factor congruence confirmed that this factor was most similar to adults’ MIND factor (cosine similarity with MIND: 0.94; with BODY: 0.71; with HEART: 0.67). It was the dominant factor for such items as sense temperatures, remember things, feel guilty, and figure out how to do things, and accounted for 30% of the shared variance in the rotated three-factor solution, and 13% of the total variance in participants’ mental capacity attributions.

The third factor corresponded primarily to social-emotional abilities, with particularly strong loadings for positive emotions. An analysis of factor congruence indicated that this factor was most similar to adults’ HEART factor, but also quite similar to adults’ BODY factor (cosine similarity with HEART: 0.87; with BODY: 0.81; with MIND: 0.62). It was the dominant factor for such items as feel happy, feel love, feel proud, and feel scared, and accounted for 30% of the shared variance in the rotated three-factor solution, and 13% of the total variance in participants’ mental capacity attributions.

Together, these three factors accounted for 43% of the total variance in participants’ mental capacity attributions.

See Figure 3.3 for all factor loadings, and Table 3.2 for cosine similarities between child and adult factors.

I would describe this conceptual structure as reminiscent of the BODY-HEART-MIND structure found among older children and adults, but not as fully “adult-like.” In particular, in this solution, the physiological sensations associated with the BODY among older children and adults are not as clearly differentiated from the emotional experiences associated with the HEART. Indeed, it it not clear that BODY vs. HEART is the most salient distinction among the first and third factors in this solution; a cleaner description of these factors might be negatively-valenced experiences vs. positively-valenced experiences.

Discussion

The results of Study 3 suggest that the three-part conceptual structure—anchored by BODY, HEART, and MIND—is reliable and robust among 7- to 9-year-old US children. As with adults in Study 1 (see also Weisman et al., 2017), the capacities that “hang together” in older children’s reasoning when target characters are perceived to vary in mental capacity profiles appear to be highly similar to those that “hang together” when participants disagree about the mental lives of controversial “edge cases” in social reasoning (Study 2).

Meanwhile, this study suggests that this conceptual structure undergoes substantial changes between early and middle childhood. Like older children and adults, 4- to 6-year-old children’s responses were characterized by strong correlations among a suite of perceptual and cognitive capacities that I have labeled MIND. This highlights one aspect of conceptual structure that seems to be relatively stable from early childhood onward. However, in contrast to the clear distinction between physiological abilities and social-emotional abilities that characterized mental capacity attributions among older children and adults, younger children’s responses suggest that they perceived physiological and social-emotional abilities to be more closely integrated and the line between them to be more blurred.

One indication of this blurring comes from the two-factor solution suggested by parallel analysis, in which a single BODY-HEART factor emerged and was highly congruent with both the BODY and HEART factors of adults (cosine similarity with BODY: 0.93; with HEART: 0.88) factors of adults. Among the mental capacities that loaded strongly (\(\geq\) 0.60) on this factor were both physiological sensations (e.g., get hungry, feel sick…) and social-emotional experiences (feel happy, feel proud, feel sad, get hurt feelings), suggesting that younger children perceived physiological and social-emotional abilities to “go together” to a considerable degree.

Even in the three-factor solution suggested by the original factor retention criteria reported in Weisman et al. (2017), the distinction between physiological and social-emotional abilities was somewhat blurred. While the first factor, which I have labeled BODY*, was highly congruent with adults’ BODY factor (cosine similarity: 0.92), it was also the dominant factor for two canonical social-emotional items (get hurt feelings, feel sad). And while the third factor, which I have labeled HEART*, was highly congruent with adults’ HEART factor (cosine similarity: 0.87), there were several canonical social-emotional items that failed to load strongly on it (loadings \(\leq\) 0.40: feel embarrassed, feel sad, get hurt feelings, feel guilty). Stepping back, it is not clear that “physiological vs. social-emotional” is the best way to characterize the differences between these two factors. In fact, given that the strongest-loading items for BODY* were negatively valenced (get angry, get hungry, get hurt feelings) while the strongest-loading items for HEART* were positively valenced (feel happy, feel love, feel proud), it seems plausible that the more salient distinction among this age group may have been positive vs. negative valence, rather than BODY vs. HEART. The salience of negative vs. positive experiences among younger children is consistent with recent work on the development of emotion concepts, which suggests that emotion representations are dominated by a single dimension of valence in early to middle childhood, before unfolding into a two-dimensional space characterized by valence and arousal over the course of later childhood and adolescence (Nook et al., 2017).

Finally, the very fact that different approaches to factor retention yielded different results is further evidence that, although there is some evidence for a nascent distinction between BODY and HEART among 4- to 6-year-old children, this distinction was not as robust as it appeared to be among older children or adults.

Study 4: A focus on early childhood (4-5y)

One major limitation of Studies 2 and 3 was that the study protocol involved a rather advanced set of mental state vocabulary terms, including a variety of complex mental capacities (e.g., guilt, pride, awareness, depth perception) and using somewhat complicated syntax for some items (e.g., sense whether something is close by or far away, figure out how to do things). For 4- to 6-year-old children, in particular, some of the mental capacity items might have been outside of the range of words they normally hear in discussions of mental states—let alone the words they normally use themselves. In addition, younger children may have found some aspects of the experimental paradigm distracting (e.g., being seated in front of the experimenter’s laptop computer without being allowed to use it themselves) or difficult (e.g., using a three-point scale with minimal visual scaffolding).

With these considerations in mind, in Study 4 I focused on 4- to 5-year-old children, using a simpler set of mental capacities and a streamlined version of the experimental paradigm, with the aim of getting a clearer picture of conceptual structure and mental capacity attributions at this earlier point in development.

In Study 4, 104 US adults and 43 US children between the ages of 4.02-5.59y (median: 4.73y) each assessed two target characters on 18 mental capacities. To make the study appropriate for children in this age range, this study employed a new set of 18 mental capacities (some but not all of which were used in Studies 1-3). In addition, participants were presented with a more child-friendly visual representation of the three-point response scale (“no,” coded as 0; “kinda,” coded as 0.5, “yes,” coded as 1). This study employed the “edge case” variant of the general approach, with participants assessing both a beetle or a robot in sequence (with order counterbalanced across participants). (See Chapter II for detailed methods.)

As briefly described in Chapter II, the 18 mental capacities employed in Study 4 were selected from a larger pilot study in which 3- to 5-year-old children were asked to complete stories that began with each of these mental capacities as a premise (e.g., “Let’s imagine a person who loves someone. What happens next?”; “Now let’s pretend that someone remembers something. What happens next?”) and were judged on the appropriateness of their story completion.

Among the items that emerged from this pilot study as reasonable candidates for inclusion in Study 4, I selected items to represented the three “conceptual units” revealed by Studies 1-3 (BODY, HEART, and MIND). The goal here was to create a conservative test of developmental differences between younger and older children in the “conceptual units” observed in Study 3, by constructing materials that should maximize the chances of observing the same (or similar) conceptual units among young children as were observed among older children and adults in Studies 1-3. If 4- to 5-year-old children in fact have access to conceptual units similar to BODY, HEART, and MIND, the mental capacities employed in Study 4 (and the generally more child-friendly protocol) should provide the best chances of surfaces this conceptual structure. Conversely, if Study 4 reveals differences in conceptual structure despite these modifications, and despite “stacking the odds” against developmental differences in the selection of mental capacities, this provides stronger evidence for conceptual change in the number and/or kind of conceptual units available to children at different points in development.

The final set of BODY items included feel hungry, get thirsty, feel sick, feel tired, get scared, and smell things. HEART items included love someone, hate someone, feel happy, get sad, feel sorry, and get lonely. MIND items included see, hear, think, remember things, know stuff, and figure things out (see also Table 2.1 in Chapter II). I ensured that each category included a variety of phrasings (e.g., “feel hungry” vs. “get thirsty”; “remember things” vs. “know stuff”) and valences when appropriate (e.g., happiness vs. sadness); when possible, I aimed to have these aspects of phrasing vary orthogonally with categories, such that the framings “get X” vs. “feel X” appeared roughly equally often among the BODY and HEART items, and the word “things” appeared equally often among the BODY and MIND items.

Special notes on data processing and analysis

In Study 4, participants assessed two target characters side by side (in contrast to Studies 1a, 1b, 1d, 2, and 3, in which each participant assessed just one target character). In the current analyses, I treat each participant’s assessments of each target character as a separate set of observations (as if they came from different participants), in effect doubling the sample size for these studies (but ignoring the within-subject design).

Results

Adults

How many conceptual units?

All three protocols for determining how many factors to retain suggested retaining three factors; see Table 3.1.

What are these conceptual units?

After rotation, the first factor corresponded primarily to physiological sensations (BODY). It was the dominant factor for such items as get thirsty, feel hungry, smell things, and feel tired, and accounted for 41% of the shared variance in the rotated three-factor solution, and 17% of the total variance in participants’ mental capacity attributions, and 29% of the total variance in participants’ mental capacity attributions.

The second factor corresponded primarily to social-emotional abilities (HEART). It was the dominant factor for such items as love someone, get sad, hate someone, and feel sorry, and accounted for 35% of the shared variance in the rotated three-factor solution, and 25% of the total variance in participants’ mental capacity attributions.

The third factor corresponded primarily to perceptual-cognitive abilities (MIND). It was the dominant factor for such items as figure things out, remember things, know stuff, and think, and accounted for 23% of the shared variance in the rotated three-factor solution, and 16% of the total variance in participants’ mental capacity attributions.

Together, these three factors accounted for 70% of the total variance in participants’ mental capacity attributions.

See Figure 3.4 for all factor loadings.

In sum, as in Studies 1-3, EFA of adults’ responses revealed a conceptual structure characterized by a three-way distinction between BODY, HEART, and MIND. This suggests that the modified preschooler-friendly paradigm was valid: Using simpler vocabulary and a within-subjects approach to target characters elicited the same intuitive ontology of mental life, among US adults, that was revealed in Studies 1-3.

Children (4-5y)

How many conceptual units?

Each of the three factor retention protocols suggested a different number of factors to retain; see Table 3.1.

As among younger children in Study 3, minimizing BIC suggested a null solution consisting of a single factor; in other words, this protocol indicated that the correlation structure of children’s responses provided no evidence for distinct latent constructs.

Meanwhile, parallel analysis suggested retaining three factors, and the retention criteria used in Weisman et al. (2017) suggested retaining four factors. In both the three- and four-factor solutions, each factor accounted for a substantial amount of the shared variance, was the dominant factor for several mental capacities, and had at least moderately strong factor loadings for some subset of mental capacities.

Given all this, I will present and interpret both three- and four-factor solutions; see Appendix A for the null, one-factor solution suggested by minimizing BIC.

What are these conceptual units?

Three-factor solution

First, I will examine the three-factor solution suggested by parallel analysis. Importantly, this is also the number of factors retained among US adults in this study.

After rotation, the first factor corresponded primarily to physiological sensations. An analysis of factor congruence indicated that this factor was most similar to adults’ BODY factor (cosine similarity with BODY: 0.95; with HEART: 0.57; with MIND: 0.43). It was the dominant factor for such items as feel hungry, smell things, get thirsty, and feel tired, and accounted for 43% of the shared variance in the rotated three-factor solution, and 14% of the total variance in participants’ mental capacity attributions.

The second factor corresponded primarily to perceptual-cognitive abilities. An analysis of factor congruence confirmed that this factor was most similar to adults’ MIND factor (cosine similarity with MIND: 0.88; with HEART: 0.64; with BODY: 0.38). It was the dominant factor for such items as know stuff, remember things, think, and hear, and accounted for 35% of the shared variance in the rotated three-factor solution, and 12% of the total variance in participants’ mental capacity attributions.

The third factor corresponded primarily to social-emotional abilities. An analysis of factor congruence confirmed that this factor was most similar to adults’ HEART factor (cosine similarity with HEART: 0.80; with MIND: 0.45; with BODY: 0.38). It was the dominant factor for such items as get lonely, love someone, and feel sorry, and accounted for 22% of the shared variance in the rotated three-factor solution, and 7% of the total variance in participants’ mental capacity attributions.

Together, these three factors accounted for 33% of the total variance in participants’ mental capacity attributions.

See Figure 3.4 for all factor loadings, and Table 3.2 for cosine similarities between child and adult factors.

I would describe this conceptual structure as strongly reminiscent of the BODY-HEART-MIND structure found among older children and adults.

CHECK BACK WITH MORE DATA!

Four-factor solution

I will now turn to the four-factor solution suggested by the factor retention criteria employed in the original publication of Study 1 (Weisman et al., 2017).

After rotation, the first factor corresponded primarily to perceptual-cognitive abilities, as well as some positive social-emotional abilities (e.g., love someone, feel happy). An analysis of factor congruence indicated that this factor was most similar to adults’ MIND factor (cosine similarity with MIND: 0.87; with HEART: 0.67; with BODY: 0.32). It was the dominant factor for such items as know stuff, remember things, love someone, and think, and accounted for 30% of the shared variance in the rotated four-factor solution, and 12% of the total variance in participants’ mental capacity attributions.

The second factor corresponded primarily to physiological sensations, with an exceptionally strong factor loading for feel sick. An analysis of factor congruence confirmed that this factor was most similar to adults’ BODY factor (cosine similarity with BODY: 0.87; with HEART: 0.56; with MIND: 0.35). It was the dominant factor for such items as feel sick, feel tired, smell things, and get scared, and accounted for 29% of the shared variance in the rotated four-factor solution, and 11% of the total variance in participants’ mental capacity attributions.

The third factor also corresponded primarily to physiological sensations, as well as some perceptual abilities (e.g., hear, see). An analysis of factor congruence indicated that this factor was most similar to adults’ BODY factor (cosine similarity with BODY: 0.78; with MIND: 0.50; with HEART: 0.41). It was the dominant factor for such items as get thirsty, hear, feel hungry, and see, and accounted for 22% of the shared variance in the rotated four-factor solution, and 8% of the total variance in participants’ mental capacity attributions.

The fourth factor corresponded primarily to social-emotional abilities, particularly negative emotions. An analysis of factor congruence indicated that this factor was most similar to adults’ HEART factor (cosine similarity with HEART: 0.77; with BODY: 0.45; with MIND: 0.40). It was the dominant factor for such items as get lonely, get sad, and feel sorry, and accounted for 19% of the shared variance in the rotated four-factor solution, and 7% of the total variance in participants’ mental capacity attributions.

Together, these three factors accounted for 38% of the total variance in participants’ mental capacity attributions.

See Figure 3.4 for all factor loadings, and Table 3.2 for cosine similarities between child and adult factors.

I would summarize the four-factor solution as a variant on the three-factor solutions common among adults and older children in Studies 1-3 (and surfaced the three-factor solution discussed in the previous section). This solution is characterized by distinct constructs of HEART and MIND, suggests a further differentiation of what I’ve referred to as BODY into sub-categories that are not easy to label or describe.

CHECK BACK WITH MORE DATA!

Table 3.2: Factor congruence (as indexed by cosine similarity) between children's and adults' factors from the three-factor solution for the corresponding study (BODY, HEART, and MIND columns). Results are grouped by study and age group. In principle, cosine similarities could range from -1 (which would indicate that two factors are perfect opposites of each other) to +1 (which would indicate that two factors are perfectly identical to each other). Cosine similarities with absolute values greater than or equal to 0.75 are marked in bold.
Children's factor BODY HEART MIND
Study 2, 7- to 9-year-old children
BODY 0.91 0.26 0.03
HEART 0.41 0.97 0.43
MIND 0.01 0.35 0.94
Study 3, 7- to 9-year-old children
BODY 0.97 0.65 0.63
HEART 0.66 0.98 0.48
MIND 0.62 0.47 0.96
Study 3, 4- to 6-year-old children (3-factor solution)
BODY* 0.92 0.81 0.70
HEART* 0.81 0.87 0.62
MIND 0.71 0.67 0.94
Study 3, 4- to 6-year-old children (2-factor solution)
BODY-HEART 0.93 0.88 0.70
MIND 0.73 0.70 0.94
Study 4, 4- to 5-year-old children (3-factor solution)
BODY 0.95 0.57 0.43
HEART 0.38 0.80 0.45
MIND 0.38 0.64 0.88
Study 4, 4- to 5-year-old children (4-factor solution)
BODY (nausea) 0.87 0.56 0.35
BODY (other) 0.78 0.41 0.50
HEART* 0.45 0.77 0.40
MIND* 0.32 0.67 0.87

Discussion

Using a paradigm that was better tailored for young children and that featured vocabulary items expressly designed to pick out (adult) notions of BODY, HEART, and MIND in a balanced way (6 items per factor), Study 4 provided some indications that the conceptual units available to young children may be more “adult-like” than Study 3 would suggest. However, even in this modified paradigm, there are several indications that this three-part conceptual structure is not fully mature by the age of 4-5y.

First, the similarities. As with the younger (4- to 6-year-old) children in Study 3, 4- to 5-year-old children’s responses in Study 4 were characterized by strong correlations among a suite of perceptual and cognitive capacities that I have been referring to as MIND. This suite of MIND abilities was relatively robust to analysis choices and emerged clearly in both Studies 2 and 3, bolstering my earlier claim that this is one aspect of conceptual structure that may be relatively stable from early in childhood.

Study 4 suggests that these similarities may extend even further. The three-factor solution suggested by parallel analysis includes recognizable BODY and MIND factors as well as a nascent HEART* factor, on which half of the mental capacities that were designated as HEART items a priori loaded moderately strongly (loadings \(\geq\) 0.40: get lonely, love someone, get sad). (The four-factor solution includes a very similar HEART-like factor; see Figure 3.4.) This is a substantially more adult-like conceptual structure than was observed among 4- to 6-year-old children in Study 3.

However, as in Study 3, the very fact that different approaches to factor retention yielded different results is further evidence that this BODY-HEART-MIND framework is not exactly “robust” among preschool-age children.

Consider first young children’s understanding of the social-emotional abilities that we designated as representative of HEART. In Study 3, the social-emotional domain appeared to be the site of the most striking differences between 4- to 6-year-old children, on the one hand, and older children and adults on the other. EFAs of 4- to 5-year-old children’s responses in Study 4 offer convergent evidence that young children may not consider the social-emotional abilities that constitute what I have called HEART among adults to hang together as one clearly distinct component of mental life. Even in the more adult-like, three-factor solution suggested by parallel analysis, two of the six designated HEART items did not load strongly on the ostensive HEART* factor (loadings \(\leq\) 0.30: feel happy, hate someone); indeed, the dominant factor for these two items was MIND*, not HEART*. (These observations also hold in the four-factor solution suggested by Weisman et al.’s (2017) original factor retention protocol; in fact, in this solution, MIND* was the dominant factor for three of the six designated HEART items.) As a point of comparison, among adults in Study 4 all six of the designated HEART items loaded most strongly on the HEART factor, suggesting these divergent patterns are not due merely to the use of a new set of mental capacity terms.

In addition, Study 4 provides new evidence that young children’s understanding of the domain of physiological sensations (BODY) may also diverge from that of adults. In the more adult-like three-factor solution, the factor that I have labeled BODY* elicited strong factor loadings (loadings \(\geq\) 0.40) from one designated HEART item (get sad) and one designated MIND item (think), in addition to the six canonical physiological sensations that were designated as BODY items a priori. Moreover, in the four-factor solution physiological sensations actually differentiated into two distinct factors (though not on any easily interpretable line, in my view). Again, among adults in Study 4 all six of the designated BODY items loaded most strongly on the BODY factor, suggesting these divergent patterns are not due merely to the use of a new set of mental capacity terms. Instead, these results suggest that the conceptual unit that I have called BODY may not be as robust, distinct, and unified among young children as it appears to be among adults.

Comparing the “size” of conceptual units across Studies 1-4

In the previous sections in this chapter, I described EFA results for Studies 1-4 and offered both qualitative comparisons of the “meaning” of the conceptual units revealed by these analyses and quantitative assessments of the similarity of conceptual units across different age groups within each study (see Table 3.2). In this final section, I explore one additional aspect of these analyses: the “size” of the conceptual units identified in each sample.

For each of the EFA solutions reported earlier in this chapter, I included but did not discuss three additional pieces of information about the solution: (a) the total variance in mental capacity attributions explained by the factors in combination; (b) the proportion of total variance explained by each factor, and (c) the proportion of the shared variance explained by each factor. Here I reflect on what these metrics might reveal about the sets of conceptual units revealed by EFA and compare the “size” of these conceptual units across studies and age groups.

Analyses: Total variance, proportion of total variance, and proportion of shared variance explained

For each EFA solution, the total variance in the measured variables explained by all of the retained factors in combination can be estimated by taking the mean communality across all variables (where “communality” is a measure of the degree to which a given variable is correlated with all other variables, indexed by the sum of the squared loadings of that variable on each of the retained factors). This could range, in theory, from 0-100%, and provides an indication of how well the “conceptual units” identified by EFA account for the observed correlations among mental capacity attributions in a particular sample—which in turn might be taken as a gauge of the size of the set of conceptual units identified by this analysis. The total variance explained by each of the EFA solutions discussed in this chapter is illustrated in Figure 3.5, panel A.

A researcher might also be interested in assessing the size of a single conceptual unit, either in the absolute or in relation to the other conceptual units identified by that EFA solution. To this end, the proportion of total variance in all the measured variables explained by a particular factor can be calculated by diving the sum of squared loadings for that factor across all variables by the total number of measured variables. (The total variance for a given EFA solution, discussed in the previous section, is the sum of these proportions across all factors in that solution.) This could range, in theory, from 0% up to the total variance for that solution (given in Figure 3.5, panel A), and provides an indication of the absolute size of the particular conceptual unit in question. The proportion of total variance explained by each factor, for each EFA solution discussed in this chapter, is illustrated in Figure 3.5, panel B.

Another approach to estimating the size of each factor is to examine the proportion of shared variance explained by each factor (relative to the other factors in that EFA solution). For a given solution, the “shared variance” explained by the combination of all of the factors in that solution is, by definition, 100%. The proportion of this “shared variance” explained by a single factor can be calculated by dividing the sum of squared loadings for that factor by the sum of the sum of squared loadings for all factors in a given solution. For example, in a three-factor solution, if all factors were of equal size, each would account for 33% of the shared variance; if one factor instead accounted for 50% of the shared variance and the others each accounted for 25%, this would provide some evidence that the first factor is in some sense larger or more important than the other two factors. The proportion of shared variance explained by each factor, for each EFA solution discussed in this chapter, is illustrated in Figure 3.5, panel C.

In my view, this last index of size is the most useful way to compare the size of conceptual units across the various studies and age groups presented in this chapter, because it allows me to compare the sizes of similar conceptual units (e.g., factors that I have labeled BODY) that I have identified in different age groups or in studies using different experimental paradigms, even though these age groups or studies might vary in the total variance explained by their respective EFA solutions (which would, in turn, impose different constraints on how much of this total variance each factor could explain, in theory). For example, in Study 4, the three-factor solution for adults explained 70% of the total variance, which places a relatively high “ceiling” on the proportion of total variance that could be explained by a single factor; in comparison, the three-factor solution for children explained 33% of the total variance, placing a much lower “ceiling” on the proportion of total variance that could be explained by a single factor. While it is interesting to note that the BODY-like factors in these solutions explained 29% of the total variance in adults’ responses and only 14% of the total variance in children’s responses (Figure 3.5, panel B), it is in my view more illuminating that in both solutions the BODY-like factor explained a very similar proportion of the shared variance in each of these samples (among adults: 41%; among children: 43%).

Results (all studies)

The total variance explained by the EFAs reported in this chapter (Figure 3.5, panel A) tended to be largest for adult samples (range: 48-78%; left column), smaller for samples of 7- to 9-year-old children (range: 35-54%; middle column), and lowest in the youngest samples of children (range: 33-43%; right column). This could be taken to indicate that the conceptual structures identified by EFA were more robust and perhaps played a bigger role in adults’ mental capacity attributions, relative to children (at least in this general experimental paradigm). However, this pattern is also in line with a domain-general decrease in the “noise” inherent to participants’ behavioral responses with development.

Among adults (Figure 3.5, left columns), a clear pattern emerged in the relative size of these factors as indexed by variance explained (see panel B for the proportion of total variance explained, and panel C for the proportion of shared variance explained). In all eight of the EFA solutions included in this chapter, adults’ BODY and HEART factors explained a disproportionately large amount of the variance (more than would be expected if all factors were equal in size; see panel C), and their MIND factor explained a disproportionately small amount (less than would be expected if all factors were equal in size). In most of these solutions, the BODY factor explained slightly more variance than the HEART factor, but these differences were generally quite small. This suggests that the conceptual units I have referred to as BODY and HEART may play especially large roles in US adults’ representations of mental life, at least when they are assessing the mental capacities of various beings in the world.

Among 7- to 9-year-old children (Figure 3.5, middle columns), a similar pattern to that of adults was observed in Study 3 (orange), with children’s BODY and HEART factors explaining more variance than their MIND factor (see panel B for the proportion of total variance explained, and panel C for the proportion of shared variance explained). However, in Study 2 (purple), children’s HEART factor far more variance than either of the other factors. This raises the possibility that the conceptual unit I have called HEART looms especially large in the representations of children in this age range—perhaps because it has emerged relatively recently as a distinct unit in its own right. Further studies would be required to determine whether this phenomenon is reliable and the circumstances under which is more or less likely to manifest.

Among 4- to 6-year-old children (Study 3) and 4- to 5-year-old children (Study 4; Figure 3.5, right columns), the BODY-like factors explained disproportionately large amounts of variance (see panel B for the proportion of total variance explained, and panel C for the proportion of shared variance explained). This holds true across all solutions for both studies (when combining the two BODY-like factors in the four-factor solution) and was particularly pronounced in the two-factor solution for Study 3 (orange, top row), in which younger children’s BODY-HEART factor was nearly twice the ‘size’ of their MIND factor—perhaps a harbinger of an impending split between BODY and HEART as young children’s conceptual representations become more like the older children and adults around them. The variance explained by younger children’s HEART-like factors in the three-factor solutions for Studies 3 and 4 (middle row) appears to have been somewhat smaller than it was among older children and adults, particularly in Study 4 (turquoise), while the relative proportion of shared variance explained by the more MIND-like factors appears to have been roughly comparable to that of adults in all studies.

Taken together, these observations are generally consistent with the possibility that the conceptual unit that I have called MIND may be relatively mature by the preschool years, not only in its content (the perceptual-cognitive abilities that are closely associated with this conceptual unit) but also in its relative size. By contrast, I would interpret these patterns as providing further indication of an ongoing negotiation of the physiological (BODY) and social-emotional (HEART) domains during early childhood, and perhaps extending into middle childhood.

General discussion

In four large-scale studies (total N=492 children and 2062 adults), I set out to explore the development of US children’s conceptual representations of mental life between 4-9y of age and compare it to the representations of adults in their general cultural context. In this chapter, I have focused on one aspect of these representations: the “conceptual units” available to participants of different ages in reasoning about the mental lives of other beings.

Studies with adults using different experimental approaches (asking participants to assess the mental lives of edge cases or a diverse range of target characters), their between- vs. within-subjects design, the number and range of mental capacities included, and the response options available to participants all converged to suggest that adults’ conceptual representations of mental life are anchored by a three-way distinction between the physiological sensations of the BODY, the social-emotional abilities of the HEART, and the perceptual-cognitive abilities of the MIND. EFA solutions consistently revealed these three conceptual units, never revealed fewer than these three units, and only rarely suggested additional finer-grained distinctions. The combination of these three conceptual units generally accounted for a substantial amount of the total variance in participants’ mental capacity responses (48-78%; see previous section)—which is particularly impressive given the many other potential influences on participants’ mental capacity attributions (e.g., their recollection of specific interactions with entities similar to the target character(s) they were assessing; individual differences in their interpretation of such complicated concepts as “having free will,” “being conscious,” or “holding beliefs”). In sum, I consider these studies to provide strong evidence that BODY, HEART, and MIND are robust, reliable, and important components of the typical US adult’s conceptual representation of mental life. (For further discussion of the subset of adult studies I have labeled “Study 1,” with a particular focus on the social implications of this conceptual structure, see Weisman et al., 2017.)

Meanwhile, analyses of the conceptual units underlying children’s mental capacity attributions (Studies 2-4) suggested both meaningful continuity and some substantial changes in the conceptual units that seem to be available to children at different points in development.

Both younger children (4-6y of age) and older children (7-9y of age) treated perceptual-cognitive abilities (MIND) as a distinct component of mental life: Abilities to detect, store, and use information about the environment traveled together in their attributions, and were endorsed somewhat independently from physiological or social-emotional abilities. This held true across studies that featured different experimental approaches (“edge case” vs. “diverse characters”), designs (between- vs. within-subjects), and varying sets of mental capacities. Such robust continuity across this wide age range is particularly striking given the open-ended, exploratory nature of these studies. A priori, for any of these samples it seemed quite plausible that EFA would reveal a suite of highly correlated “experiential” perceptual abilities (e.g., seeing, hearing, perhaps along with emotional experience) that was distinct from the more “cognitive” or “agentic” abilities (e.g., thinking, remembering, as in Gray et al., 2007). Likewise, it could have easily been the case that younger children did not share any consensus view of which mental capacities “go together” in this experimental paradigm, in which case EFA would have revealed no stable factor structure (i.e., retention protocols would have suggested null, 1-factor solutions more frequently, and the “factors” revealed would have been more difficult to interpret). In light of these alternative possibilities, the fact that a MIND-like factor emerged in every age group in every study, and in each case was highly similar to the MIND factor of adults in that experimental paradigm, should be interpreted as strong evidence for a substantial degree of continuity in this conceptual unit from early childhood, with no evidence of substantial change through middle childhood (though of course a full test of developmental continuity would require further sampling between 10-18y of age).

Like adults, in addition to the perceptual-cognitive abilities of the MIND, older children (7-9y of age) made a further differentiation between the physiological sensations of the BODY vs. the social-emotional abilities of the HEART. In other words, the set of conceptual units available to 7- to 9-year-old children in these studies appears to have been very similar to those available to their adult counterparts. In one of the two studies with this age group (Study 2, but not Study 3), an analysis of the variance explained by each of these conceptual units hinted at the possibility that HEART may loom especially large (larger than BODY or MIND) in older children’s representations of mental life; this is in contrast to studies with adults, in which the HEART factor never explained more of the variance than the BODY factor (see previous section). This could be interpreted as something of a relic from a developmentally earlier conceptual representation (in which capacities related to BODY and HEART were more integrated; see next paragraph), which at least some of the younger children in these 7- to 9-year-old samples may have held until recently (or may have continued to hold at the time of the experiment). However, since this was only apparent in one of the two studies with this age group, I would urge the reader to interpret this finding with caution and focus primarily on the overwhelming similarity between the sets of conceptual units that seem to characterize the representations of older children and adults.

Among younger children, similarities to adults’ conceptual representations were evident, but more tenuous. In both of the studies with this age group (4- to 6-year-old children in Study 3; 4- to 5-year-old children in Study 4), retaining three factors revealed conceptual units that were at least moderately similar to adults’ BODY and HEART, suggesting that this distinction is nascent, if not fully mature, among young children. Similarities between young children and adults were especially striking in Study 4, which was specifically designed to offer the best chance of discovering this adult-like representation among preschool-age children. However, even in this “best-shot” scenario, substantial differences emerged: For example, the canonical social-emotional abilities feel happy and hate someone were much more strongly associated with children’s MIND factor than their HEART factor. (See Study 4 results for more examples of differences between children and adults in their EFA solutions.)

Moreover, in both samples of younger children, different factor retention protocols suggested retaining different numbers of factors; this was not the case in either of the samples of older children, and this fact alone provides some indication that younger children’s representations were less identifiable and less robust. Beyond this, in several of the EFA solutions of younger children’s responses, their representations appeared to be notably un-adult-like. For example, in the two-factor solution for younger children in Study 3, physiological sensations and social-emotional abilities appeared to be integrated into a single conceptual unit that I labeled BODY-HEART. In the three-factor solution for this study, a distinction between positively-valenced vs. negatively-valenced abilities seemed to better characterize children’s representations than a distinction between “physiological” (BODY) vs. “social-emotional” abilities (HEART). And in the four-factor solution for younger children in Study 4, canonical HEART abilities were split across a more HEART-like vs. a more MIND-like factor, while canonical BODY abilities were also split across two BODY-like factors (see previous sections for details). Taken together, these two studies do not paint a clear picture of a single, robust conceptual representation among 4- to 6-year-old children; instead, the variability across studies and analysis decisions suggests a lack of robustness, and the various divergences from adults’ response patterns hint at many different ways that younger children’s understanding of mental life might change and evolve over early childhood.

Chapter conclusion

In this chapter, I explored one aspect of conceptual representations of mental life among US children and adults: The fundamental conceptual units available to people as they assess and reason about the mental lives of various beings in the world. Studies 2-4 are consistent with the following theory: Over the course of early childhood, the set of conceptual units available to children expands in number and the individual conceptual units (particularly BODY and HEART) are refined in their content and their size, reaching an adult-like state (BODY, HEART, and MIND) some time in the early elementary school years.

Of course, this is not the only possible interpretation of the pattern of results presented here; follow-up studies that provide snapshots of a larger number of narrower age ranges, further analyses that aim to capture this aspect of conceptual development more continuously, and further studies employing different designs (e.g., to capture conceptual change at the level of the individual) or employ different experimental paradigms (e.g., to test the hypothesis that younger children consider physiological sensations and social-emotional abilities to be more similar or related to each other than do older children or adults) could provide converging evidence or could challenge this theoretical interpretation. The primary role of the studies and analyses discussed here has been to inspire the hypothesis stated in the previous paragraph and to the foundation for future tests of this hypothesis, in turn refining a general theory of conceptual development in this domain.

In the next chapter, I apply the same exploratory spirit to another aspect of these conceptual representations: the relationships among these conceptual units.

LS0tCnRpdGxlOiAnQ2hhcHRlciBJSUk6IENoYW5nZXMgaW4gY29uY2VwdHVhbCB1bml0cycKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHllcwphbHdheXNfYWxsb3dfaHRtbDogeWVzCi0tLQoKYGBge3IgZ2xvYmFsX29wdGlvbnMsIGluY2x1ZGUgPSBGfQprbml0cjo6b3B0c19jaHVuayRzZXQoZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuNjcsCiAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlID0gRiwgZWNobyA9IEYpCmBgYAoKYGBge3J9CiMgIyBmb3Iga25pdHRpbmcgdG8gLmRvY3gKIyBvdXRwdXQ6CiMgICB3b3JkX2RvY3VtZW50OgojICAgICByZWZlcmVuY2VfZG9jeDogIi4vd29yZC1zdHlsZXMtcmVmZXJlbmNlLmRvY3giCiMgYWx3YXlzX2FsbG93X2h0bWw6IHllcwogICAKIyAjIGZvciBrbml0dGluZyB0byAubmIuaHRtbCAKIyBvdXRwdXQ6CiMgICBodG1sX25vdGVib29rOgojICAgICB0b2M6IHllcwojICAgICB0b2NfZGVwdGg6IDQKIyAgICAgdG9jX2Zsb2F0OiB5ZXMKYGBgCgpgYGB7cn0KIyBydW4gdXItc2V0dXAgc2NyaXB0ICh3aGljaCBydW5zIG90aGVyIHNjcmlwdHMpCnNvdXJjZSgiLi9zY3JpcHRzL19TRVRVUC5SIikKYGBgCgoKIyBDaGFwdGVyIG92ZXJ2aWV3CgpJbiB0aGlzIGNoYXB0ZXIsIEkgZm9jdXMgb24gdGhlIGZpcnN0IG9mIG15IHRocmVlIGtleSBxdWVzdGlvbnMgYWJvdXQgdGhlIGRldmVsb3BtZW50IG9mIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZTogX1doYXQgYXJlIHRoZSBjb21wb25lbnRzLCBvciAiY29uY2VwdHVhbCB1bml0cywiIHRoYXQgYW5jaG9yIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZSBhdCBkaWZmZXJlbnQgcG9pbnRzIGluIGRldmVsb3BtZW50P18gQXMgZGVzY3JpYmVkIGluIENoYXB0ZXIgSUksIHRvIGFkZHJlc3MgdGhpcyBxdWVzdGlvbiBJIGRyYXcgb24gZGF0YSBmcm9tIGFsbCBvZiB0aGUgY3VycmVudCBzdHVkaWVzIChTdHVkaWVzIDEtNCk7IGZvciBkZXRhaWxzIGFib3V0IHRoZSBtZXRob2RzIG9mIHRoZXNlIHN0dWRpZXMsIHNlZSBDaGFwdGVyIElJLiBUaGUgZ29hbCBvZiB0aGlzIGNoYXB0ZXIgaXMgdG8gcHJvdmlkZSAic25hcHNob3RzIiBvZiB0aGUgc2V0cyBvZiBjb25jZXB0dWFsIHVuaXRzIGF2YWlsYWJsZSB0byBwYXJ0aWNpcGFudHMgaW4gZWFybHkgY2hpbGRob29kLCBtaWRkbGUgY2hpbGRob29kLCBhbmQgYWR1bHRob29kLiAKCihOb3RlIHRoYXQgdGhpcyB3YXMgdGhlIHByaW1hcnkgcGxhbm5lZCBhbmFseXNpcyBmb3IgYWxsIG9mIHRoZSBzdHVkaWVzIGluY2x1ZGVkIGluIHRoaXMgZGlzc2VydGF0aW9uOyBzZWUsIGUuZy4sIFdlaXNtYW4gZXQgYWwuLCAyMDE3LikKCgojIEdlbmVyYWwgYW5hbHlzaXMgcGxhbgoKIyMgSGlnaC1sZXZlbCBvdmVydmlldwoKSW4gYW5hbHl6aW5nIHRoZXNlIGRhdGFzZXRzIHdpdGggYW4gZXllIHRvd2FyZCBpZGVudGlmeWluZyAiY29uY2VwdHVhbCB1bml0cywiIHRoZSBiYXNpYyBpbnNpZ2h0IGlzIHRoYXQgdHJhY2tpbmcgdGhlIGNvdmFyaWFuY2Ugb2YgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucyBwcm92aWRlcyBhIHdheSBvZiBkaXNjb3ZlcmluZyBzdWl0ZXMgb2YgbWVudGFsIGNhcGFjaXRpZXMgdGhhdCAiaGFuZyB0b2dldGhlciIgaW4gcmVhc29uaW5nIGFib3V0IG1lbnRhbCBsaWZlLCBhbmQgdGhhdCB0aGVzZSBzdWl0ZXMgb2YgbWVudGFsIGNhcGFjaXRpZXMgbWlnaHQgY29ycmVzcG9uZCB0byB0aGUgdW5pdHMgb2Ygc29tZSBsYXJnZXIgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGdlbmVyYWwgZG9tYWluLiBUbyBib3Jyb3cgYW4gZXhhbXBsZSBmcm9tIENoYXB0ZXIgSUk6IElmIHBhcnRpY2lwYW50cyB3aG8gZW5kb3JzZSBDYXBhY2l0eSBYIGFsc28gdGVuZCB0byBlbmRvcnNlIENhcGFjaXRpZXMgWSBhbmQgWiwgdGhpcyBwcm92aWRlcyBzb21lIGV2aWRlbmNlIHRoYXQgQ2FwYWNpdGllcyBYLCBZLCBhbmQgWiBjb25zdGl0dXRlIGEgc3VpdGUgb2YgbWVudGFsIGNhcGFjaXRpZXMgdGhhdCBhcmUgY2xvc2VseSBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUgdW5kZXJseWluZyAiY29uY2VwdHVhbCB1bml0LiIgCgpJbiBvdGhlciB3b3JkcywgbXkgZ29hbCBpbiB0aGUgY3VycmVudCBjaGFwdGVyIGlzIHRvIHVuY292ZXIgYSBzZXQgb2YgbGF0ZW50IGNvbnN0cnVjdHPigJQiY29uY2VwdHVhbCB1bml0cyLigJR0aGF0IGNvdWxkIGhhdmUgZ2l2ZW4gcmlzZSB0byB0aGUgY29ycmVsYXRpb25zIGFtb25nIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMgYXMgb2JzZXJ2ZWQgaW4gYSBnaXZlbiBncm91cCBvZiBwYXJ0aWNpcGFudHMuIEEgY2Fub25pY2FsIHdheSB0byBpZGVudGlmeSBsYXRlbnQgY29uc3RydWN0cyB2aWEgb2JzZXJ2ZWQgY29ycmVsYXRpb25zIGlzIGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcyAoRUZBKSwgYSBmb3JtIG9mIGRpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbiB0aGF0IHBvc2l0cyB0aGF0IHRoZSBvYnNlcnZlZCB2YXJpYWJsZXMgaW4gYSBnaXZlbiBkYXRhc2V0IGFyZSByZWxhdGVkLCB0byB2YXJ5aW5nIGRlZ3JlZXMsIHRvIGEgc21hbGxlciBzZXQgb2YgdW5vYnNlcnZlZCAiZmFjdG9ycyI7IGFuZCB0aGF0IGluZGl2aWR1YWwgb2JzZXJ2YXRpb25zIG9mIGVhY2ggb2YgdGhlc2UgdmFyaWFibGVzIHJlZmxlY3QgYSBjb21iaW5hdGlvbiBvZiAoYSkgdGhlIHN0YXRlIG9mIHRoZXNlIGxhdGVudCBmYWN0b3JzLCAoYikgYSBwYXJ0aWN1bGFyIHZhcmlhYmxlJ3MgcmVsYXRpb25zaGlwIHRvIGVhY2ggb2YgdGhlc2UgbGF0ZW50IGZhY3RvcnMsIGFuZCAoYykgbm9pc2UuIEZvbGxvd2luZyB0aGlzIGxvZ2ljLCBJIHBvc2l0IHRoYXQsIGZvciBhbnkgb2YgdGhlIGN1cnJlbnQgZGF0YXNldHMsIHRoZSBtYW55IG1lbnRhbCBjYXBhY2l0aWVzIGluY2x1ZGVkIGluIHRoYXQgZGF0YXNldCBhcmUgcmVsYXRlZCwgdG8gdmFyeWluZyBkZWdyZWVzLCB0byBhIHNtYWxsZXIgc2V0IG9mIGxhdGVudCAiY29uY2VwdHVhbCB1bml0cyI7IGFuZCB0aGF0IGEgcGFydGljaXBhbnQncyBhdHRyaWJ1dGlvbnMgb2YgZWFjaCBvZiB0aGVzZSBtZW50YWwgY2FwYWNpdGllcyB0byBhIHBhcnRpY3VsYXIgdGFyZ2V0IGNoYXJhY3RlciByZWZsZWN0IGEgY29tYmluYXRpb24gb2YgKGEpIHRoZSBwYXJ0aWNpcGFudCdzIGJlbGllZnMgYWJvdXQgdGhlIGV4dGVudCB0byB3aGljaCB0aGVzZSBjb25jZXB0dWFsIHVuaXRzIGFwcGx5IHRvIHRoYXQgdGFyZ2V0IGNoYXJhY3RlciwgKGIpIGVhY2ggbWVudGFsIGNhcGFjaXR5J3MgcmVsYXRpb25zaGlwcyB0byBlYWNoIG9mIHRoZSBjb25jZXB0dWFsIHVuaXRzLCBhbmQgKGMpIG5vaXNlLiBJbiBvdGhlciB3b3Jkcywgb25lIHdheSB0byBpZGVudGlmeSBjb25jZXB0dWFsIHVuaXRzIGZvciBhIHBhcnRpY3VsYXIgc2FtcGxlIG9mIGludGVyZXN0IChlLmcuLCBVUyBhZHVsdHM7IGNoaWxkcmVuIG9mIGRpZmZlcmVudCBhZ2UgZ3JvdXBzKSBpcyB0byBjb25kdWN0IGFuIEVGQSBvdmVyIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucyBhbmQgdHJlYXQgdGhlIHJlc3VsdGluZyAiZmFjdG9ycyIgYXMgY2FuZGlkYXRlIGNvbmNlcHR1YWwgdW5pdHMuCgojIyBEZXRhaWxzIG9mIGFuYWx5c2VzCgpJbiB0aGUgcmVtYWluZGVyIG9mIHRoaXMgY2hhcHRlciwgSSByZXBvcnQgRUZBcyBmb3IgZWFjaCBhZ2UgZ3JvdXAgaW5jbHVkZWQgaW4gZWFjaCBvZiB0aGUgY3VycmVudCBzdHVkaWVzIChTdHVkaWVzIDEtNCkuIENvbmR1Y3RpbmcgYW4gRUZBIHJlcXVpcmVzIG1ha2luZyBhIHZhcmlldHkgb2YgYW5hbHlzaXMgY2hvaWNlcywgaW5jbHVkaW5nIGhvdyB0byBoYW5kbGUgbWlzc2luZyBkYXRhLCB3aGF0IGtpbmQgb2YgY29ycmVsYXRpb25zIHRvIHVzZSwgdGhlIGNob2ljZSBvZiBmYWN0b3JpbmcgYWxnb3JpdGhtLCBob3cgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgZmFjdG9ycyB0byByZXRhaW4sIHRoZSBjaG9pY2Ugb2Ygcm90YXRpb24gbWV0aG9kIChpZiBhbnkpLCBhbmQgdGhlIG1ldGhvZCBmb3IgY2FsY3VsYXRpbmcgZmFjdG9yIHNjb3Jlcy4gSW4gdGhlIGFuYWx5c2lzIGNvZGUgZm9yIHRoaXMgY2hhcHRlciBJIGhhdmUgaW5jbHVkZWQgZWFzeSBzaG9ydCBjdXRzIGZvciB0aGUgaW50ZXJlc3RlZCByZWFkZXIgdG8gZXhwbG9yZSBkaWZmZXJlbnQgb3B0aW9ucyBmb3IgZWFjaCBvZiB0aGVzZSBwYXJhbWV0ZXJzLiBIZXJlLCBJIGhhdmUgc2V0IGFsbCBvZiB0aGVzZSBwYXJhbWV0ZXJzIHRvIGJlIGNvbnN0YW50IGFjcm9zcyBFRkFzIG9mIGRpZmZlcmVudCBzYW1wbGVzIHNvIGFzIHRvIG1heGltaXplIGNvbXBhcmFiaWxpdHkgYWNyb3NzIHN0dWRpZXMuIFRvIGNvbmR1Y3QgdGhlc2UgRUZBcywgSSB1c2UgdGhlICJwc3ljaCIgcGFja2FnZSBmb3IgUiAoUmV2ZWxsZSwgMjAxOCkuCgpgYGB7cn0KIyBzZWUgIi4vc2NyaXB0cy9lZmFfcGFyYW0uUiIgZm9yIHBhcmFtZXRlciBzZXR0aW5nCmBgYAoKYGBge3J9CiMgb3ZlcnZpZXcgb2YgbWlzc2luZyBkYXRhCm5fbWlzc2luZyA8LSBOVUxMCmZvcihpIGluIGxpc3QoZDFhX2FkX3dpZGUsIGQxYl9hZF93aWRlLCBkMWNfYWRfd2lkZSwgZDFkX2FkX3dpZGUsCiAgICAgICAgICAgICAgZDJfYWRfd2lkZSwgZDJfNzlfd2lkZSwgZDNfYWRfd2lkZSwgZDNfNzlfd2lkZSwgZDNfNDZfd2lkZSwKICAgICAgICAgICAgICBkNF9hZF93aWRlLCBkNF80Nl93aWRlKSl7CiAgbl9taXNzaW5nIDwtIGMobl9taXNzaW5nLCBtaXNzaW5nX3BlcmNlbnRfZnVuKGkpKQp9CmBgYAoKIyMjIE1pc3NpbmcgZGF0YQoKRm9yIGFsbCBFRkFzLCBJIGltcHV0ZSBtaXNzaW5nIHRyaWFsLWxldmVsIGRhdGEgKGUuZy4sIHNraXBwZWQgdHJpYWxzIGFtb25nIGNoaWxkIHBhcnRpY2lwYW50cykgdXNpbmcgdGhlIG1lZGlhbiByZXNwb25zZSBmb3IgdGhhdCBtZW50YWwgY2FwYWNpdHkgYW1vbmcgb3RoZXIgcGFydGljaXBhbnRzIHdobyBldmFsdWF0ZWQgdGhlIHNhbWUgdGFyZ2V0IGNoYXJhY3Rlci4gRm9yIGV4YW1wbGUsIGlmIGFuIDgteWVhci1vbGQgcGFydGljaXBhbnQgaW4gdGhlICJiZWV0bGUiIGNvbmRpdGlvbiBmYWlsZWQgdG8gcHJvdmlkZSBhIHJlc3BvbnNlIHRvIGEgcXVlc3Rpb24gYWJvdXQgYSBiZWV0bGUncyBjYXBhY2l0eSBmb3IgaGFwcGluZXNzLCBJIGZpbGwgaW4gdGhpcyBkYXRhcG9pbnQgd2l0aCB0aGUgbWVkaWFuIHJlc3BvbnNlIHRvIHRoZSBoYXBwaW5lc3MgcXVlc3Rpb24gYW1vbmcgYWxsIG90aGVyIGNoaWxkcmVuIGZyb20gdGhlIDctIHRvIDkteWVhci1vbGQgYWdlIGdyb3VwIGZvciB0aGF0IHN0dWR5IHdobyBldmFsdWF0ZWQgdGhlIGJlZXRsZSAoaWdub3JpbmcgcmVzcG9uc2VzIGZyb20gb3RoZXIgYWdlIGdyb3VwcywgYW5kIGlnbm9yaW5nIGNoaWxkcmVuIHdobyBldmFsdWF0ZWQgc29tZSBvdGhlciB0YXJnZXQgY2hhcmFjdGVyKS4gQWNyb3NzIGFsbCBzdHVkaWVzLCBmZXdlciB0aGFuIGByIGNlaWxpbmdfZGVjKG1heChuX21pc3NpbmcpLCAyKSAgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAlIG9mIHRyaWFscyBpbiBhbnkgYWdlIGdyb3VwIHdlcmUgbWlzc2luZyBkYXRhLiBJbiBteSBqdWRnbWVudCwgdGhlIGFkdmFudGFnZXMgb2YgcmV0YWluaW5nIHRoZSBtb3N0IHBhcnRpY2lwYW50cyBwZXIgc2FtcGxlIChwYXJ0aWN1bGFybHkgZm9yIEVGQSwgd2hpY2ggaXMgaGlnaGx5IHNlbnNpdGl2ZSB0byBzYW1wbGUgc2l6ZSkganVzdGlmeSBpbXB1dGluZyB2YWx1ZXMgZm9yIHRoaXMgc21hbGwgbnVtYmVyIG9mIG1pc3NpbmcgZGF0YXBvaW50cy4gCgojIyMgQ29ycmVsYXRpb24gdHlwZQoKSSBjb25kdWN0IGFuYWx5c2VzIG92ZXIgUGVhcnNvbiBjb3JyZWxhdGlvbnMgYW1vbmcgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucywgdXNpbmcgcGFpcndpc2UgY29tcGxldGUgb2JzZXJ2YXRpb25zLiBJbiBwcmluY2lwbGUsIHBvbHljaG9yaWMgY29ycmVsYXRpb25zIGFyZSBiZXR0ZXIgc3VpdGVkIHRvIGhhbmRsZSByZXNwb25zZXMgb24gdGhlIHRocmVlLXBvaW50IHNjYWxlcyBlbXBsb3llZCBpbiBTdHVkaWVzIDItNDsgaG93ZXZlciwgaW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZXNlIGRhdGEsIGNvbmR1Y3RpbmcgRUZBcyB3aXRoIHBvbHljaG9yaWMgY29ycmVsYXRpb25zIGluc3RlYWQgb2YgUGVhcnNvbiBjb3JyZWxhdGlvbnMgdGVuZHMgdG8gZ2VuZXJhdGUgZXJyb3JzIGZ1cnRoZXIgZG93biB0aGUgYW5hbHlzaXMgcGlwZWxpbmUgKGUuZy4sIGdlbmVyYXRpbmcgY29ycmVsYXRpb24gbWF0cmljZXMgdGhhdCBhcmUgbm90IHBvc2l0aXZlIGRlZmluaXRlKSBhbmQgYXBwZWFycyB0byBiZSBzb21ld2hhdCB2dWxuZXJhYmxlIHRvIG92ZXItZml0dGluZyAoZS5nLiwgc3VnZ2VzdGluZyByZXRhaW5pbmcgc2l4IG9yIG1vcmUgZmFjdG9ycyB0aGF0IGVhY2ggYWNjb3VudCBmb3Igb25seSBhIHZlcnkgc21hbGwgYW1vdW50IG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UpLgoKIyMjIEZhY3RvcmluZyBhbGdvcml0aG0KCkkgdXNlIG9yZGluYXJ5IGxlYXN0IHNxdWFyZXMgdG8gZmluZCB0aGUgbWluaW11bSByZXNpZHVhbCBzb2x1dGlvbiwgd2hpY2ggaXMgcm9idXN0IHRvIGEgdmFyaWV0eSBvZiB3YXlzIHRoYXQgbWF0cmljZXMgY2FuIGJlICJiYWRseSBiZWhhdmVkIiAoc2VlIFJldmVsbGUsIDIwMTgpLiBXaGlsZSB0aGlzIGRpc3NlcnRhdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEgc3lzdGVtYXRpYyBleHBsb3JhdGlvbiBvZiBhbGwgb2YgdGhlIGZhY3RvcmluZyBhbGdvcml0aG1zIGF2YWlsYWJsZSB3aGVuIGNvbmR1Y3RpbmcgRUZBLCBpbiBteSBjYXN1YWwgZXhwbG9yYXRpb25zIG9mIHRoZSB2YXJpb3VzIGFsZ29yaXRobXMgYXZhaWxhYmxlIEkgaGF2ZSB5ZXQgdG8gb2JzZXJ2ZSBhbnkgc3Vic3RhbnRpYWwgZGlmZmVyZW5jZXMgdG8gdGhlIG51bWJlciBvZiBmYWN0b3JzIHJldGFpbmVkIG9yIHRvIHRoZSByZXN1bHRpbmcgc29sdXRpb25zIHRoYXQgd291bGQgY2hhbmdlIHRoZSBpbnRlcnByZXRhdGlvbnMgb2ZmZXJlZCBoZXJlLgoKIyMjIEZhY3RvciByZXRlbnRpb24gcHJvdG9jb2wKCkkgZXhhbWluZSB0aGUgcmVzdWx0cyBvZiB0aHJlZSBmYWN0b3IgcmV0ZW50aW9uIHByb3RvY29sczogKDEpIFBhcmFsbGVsIEFuYWx5c2lzLCB3aGljaCBjb21wYXJlcyB0aGUgb2JzZXJ2ZWQgY29ycmVsYXRpb24gc3RydWN0dXJlIHRvIHRoZSBjb3JyZWxhdGlvbiBzdHJ1Y3R1cmUgYXJpc2luZyBmcm9tIHJhbmRvbSBkYXRhc2V0cyBvZiB0aGUgc2FtZSBzaXplOyAoMikgTWluaW1pemluZyB0aGUgQmF5ZXNpYW4gSW5mb3JtYXRpb24gQ3JpdGVyaW9uIChCSUMpLCB3aGljaCBpcyBvbmUgbWV0aG9kIG9mIG9wdGltaXppbmcgYm90aCBnb29kbmVzcyBvZiBmaXQgYW5kIHBhcnNpbW9ueTsgYW5kICgzKSBUaGUgZmFjdG9yIHJldGVudGlvbiBwcm90b2NvbCByZXBvcnRlZCBpbiB0aGUgb3JpZ2luYWwgcHVibGljYXRpb24gb2YgU3R1ZHkgMSAoV2Vpc21hbiBldCBhbC4sIDIwMTcpLCB3aGljaCBzcGVjaWZpZXMgZXh0cmFjdGluZyB0aGUgbWF4aW1hbCBudW1iZXIgb2YgZmFjdG9ycyBhY2NvcmRpbmcgdG8gYW4gYW5hbHlzaXMgb2YgZGVncmVlcyBvZiBmcmVlZG9tIGFuZCByZXRhaW5pbmcgZmFjdG9ycyB0aGF0IG1lZXQgYWxsIHRocmVlIG9mIHRoZSBmb2xsb3dpbmcgY3JpdGVyaWE6IChhKSBoYXZlIGVpZ2VudmFsdWVzID4xLjAwLCAoYikgaW5kaXZpZHVhbGx5IGFjY291bnQgZm9yID41JSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGJlZm9yZSByb3RhdGlvbiwgYW5kIChjKSBhcmUgdGhlICJkb21pbmFudCIgZmFjdG9yICh0aGUgZmFjdG9yIHdpdGggdGhlIHN0cm9uZ2VzdCBhYnNvbHV0ZSBmYWN0b3IgbG9hZGluZykgZm9yIGF0IGxlYXN0IDEgbWVudGFsIGNhcGFjaXR5IGFmdGVyIHJvdGF0aW9uLiAKCkZvciBlYWNoIHN0dWR5LCBteSBpbnRlcnByZXRhdGlvbiBvZiBob3cgYmVzdCB0byBjaGFyYWN0ZXJpemUgdGhlIGRhdGFzZXQgKGkuZS4sIGhvdyBtYW55IGZhY3RvcnMgSSBvYnNlcnZlZCkgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZGVncmVlIG9mIGNvbnNlbnN1cyBhbW9uZyB0aGVzZSB0aHJlZSBwcm90b2NvbHMgYW5kIGJ5IHRoZSBpbnRlcnByZXRhYmlsaXR5IG9mIHRoZSByZXRhaW5lZCBmYWN0b3JzIHVuZGVyIGVhY2ggcHJvdG9jb2wgKGUuZy4sIHRoZSBwZXJjZW50IG9mIHNoYXJlZCB2YXJpYW5jZSBleHBsYWluZWQgYnkgZWFjaCBmYWN0b3IsIHRoZSBzdHJlbmd0aCBvZiBmYWN0b3IgbG9hZGluZ3MgZm9yIGVhY2ggZmFjdG9yLCBhbmQgbXkgc3ViamVjdGl2ZSBhc3Nlc3NtZW50IG9mIHRoZSBlYXNlIHdpdGggd2hpY2ggSSBjYW4gaWRlbnRpZnkgdGhlICJsYXRlbnQgY29uc3RydWN0IiBjYXB0dXJlZCBieSBlYWNoIGZhY3RvcikuIFNlZSBUYWJsZSAzLjEgZm9yIHRoZSByZXN1bHRzIG9mIGFsbCBmYWN0b3IgcmV0ZW50aW9uIHByb3RvY29scyBmb3IgYWxsIHN0dWRpZXMgYW5kIHNhbXBsZXMuIEluIHRoZSBtYWluIHRleHQgb2YgdGhpcyBjaGFwdGVyLCBJIGZvY3VzIG9uIGp1c3Qgb25lIG9yIHR3byBzb2x1dGlvbnMgKHNlZSBUYWJsZSAzLjEsIHJpZ2h0bW9zdCBjb2x1bW4pOyBhbnkgc3VnZ2VzdGVkIHNvbHV0aW9ucyB0aGF0IGFyZSBub3QgZGlzY3Vzc2VkIGluIHRoaXMgY2hhcHRlciBjYW4gYmUgZm91bmQgaW4gQXBwZW5kaXggQS4gCgojIyMgUm90YXRpb24KClRvIG1heGltaXplIGludGVycHJldGFiaWxpdHksIEkgcHJlc2VudCB2YXJpbWF4LXJvdGF0ZWQgc29sdXRpb25zLCBpbiB3aGljaCBmYWN0b3JzIGFyZSBjb25zdHJhaW5lZCB0byBiZSBvcnRob2dvbmFsIChpLmUuLCBpbnRlci1mYWN0b3IgY29ycmVsYXRpb25zIGFyZSBjb25zdHJhaW5lZCB0byBiZSAwKSBhbmQgcm90YXRlZCB0byBtYXhpbWl6ZSB0aGUgc3VtIG9mIHRoZSB2YXJpYW5jZXMgb2YgdGhlIHNxdWFyZWQgZmFjdG9yIGxvYWRpbmdzIHdpdGggdGhlIGdvYWwgb2YgYWNoaWV2aW5nICJzaW1wbGUgc3RydWN0dXJlIiAoVGh1cnN0b25lLCAxOTQ5KS4gRm9yIHVucm90YXRlZCBzb2x1dGlvbnMgYW5kIHNvbHV0aW9ucyBhcHBseWluZyBvYmxpcXVlICgib2JsaW1pbiIpIHRyYW5zZm9ybWF0aW9ucywgaW4gd2hpY2ggZmFjdG9ycyBhcmUgYWxsb3dlZCB0byBjb3JyZWxhdGUsIHNlZSBBcHBlbmRpeCBBLgoKIyMjIEZhY3RvciBzY29yZXMKCkkgdXNlIHRoZSBtZXRob2QgZGV2ZWxvcGVkIGJ5IHRlbiBCZXJnZSwgS3Jpam5lbiwgV2Fuc2JlZWssICYgU2hhcGlybyAoMTk5OSkgdG8gY2FsY3VsYXRlIGZhY3RvciBzY29yZXMsIGFzIHN1Z2dlc3RlZCBieSBSZXZlbGxlICgyMDE4KS4gKEkgaW5jbHVkZSB0aGlzIHBhcmFtZXRlciBoZXJlIGZvciBjb21wbGV0ZW5lc3M7IHRoaXMgY2hhcHRlciBkb2VzIG5vdCBpbmNsdWRlIGFueSBhbmFseXNlcyBvZiBmYWN0b3Igc2NvcmVzLikKCgojIFN0dWR5IDE6IEFuIGFkdWx0IGVuZHBvaW50CgpJbiB0aGUgY29udGV4dCBvZiB0aGlzIGRpc3NlcnRhdGlvbiwgU3R1ZHkgMSBzZXJ2ZXMgdGhlIHJvbGUgb2YgZGVzY3JpYmluZyBhIGRldmVsb3BtZW50YWwgZW5kcG9pbnQgZm9yIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlLiBJbiB0aGlzIGNoYXB0ZXIsIEkgZm9jdXMgb24gd2hhdCB0aGVzZSBzdHVkaWVzIGNhbiByZXZlYWwgYWJvdXQgdGhlIGZ1bmRhbWVudGFsIGNvbXBvbmVudHMgb2YgdGhpcyByZXByZXNlbnRhdGlvbjogV2hhdCBhcmUgdGhlIGNvbmNlcHR1YWwgdW5pdHMgYXZhaWxhYmxlIHRvIFVTIGFkdWx0cyBpbiByZWFzb25pbmcgYWJvdXQgdGhlIG1lbnRhbCBsaXZlcyBvZiB2YXJpb3VzIGJlaW5ncyBpbiB0aGUgd29ybGQ/CgpBbiBpbi1kZXB0aCBhbmFseXNpcyBhbmQgZGlzY3Vzc2lvbiBvZiB0aGVzZSByZXN1bHRzIGlzIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBwdWJsaWNhdGlvbiBvZiB0aGVzZSBzdHVkaWVzIChXZWlzbWFuIGV0IGFsLiwgMjAxNykuIEhlcmUgSSBwcmVzZW50IHRoZXNlIGFuYWx5c2VzIGFuZXcsIHdpdGggc2xpZ2h0IHR3ZWFrcyB0byB0aGUgYW5hbHlzaXMgcGlwZWxpbmUgdG8gbWF4aW1pemUgY29tcGFyYWJpbGl0eSB0byBTdHVkaWVzIDItNOKAlG5hbWVseSwgZXhhbWluaW5nIG11bHRpcGxlIGZhY3RvciByZXRlbnRpb24gcHJvdG9jb2xzIChyYXRoZXIgdGhhbiBvbmx5IG9uZSksIGFuZCByZWNvZGluZyB0aGUgcmVzcG9uc2Ugc2NhbGUgdXNlZCBpbiB0aGVzZSBzdHVkaWVzIHRvIGJlZ2luIGF0IDAgKHJhdGhlciB0aGFuIGJlaW5nIGNlbnRlcmVkIGF0IDApLiAKCiMjIFNwZWNpYWwgbm90ZXMgb24gZGF0YSBwcm9jZXNzaW5nIGFuZCBhbmFseXNpcwoKQXMgbm90ZWQgaW4gQ2hhcHRlciBJSSwgaW4gdGhlIG9yaWdpbmFsIGFuYWx5c2lzIG9mIFN0dWRpZXMgMWEtMWQgcmVzcG9uc2VzIHdlcmUgcmVjb2RlZCB0byBydW4gZnJvbSAtMyB0byArMyBiZWZvcmUgYW5hbHlzZXMgKFdlaXNtYW4gZXQgYWwuLCAyMDE3KTsgaW4gdGhpcyBkaXNzZXJ0YXRpb24sIEkgbWFpbnRhaW4gdGhlIDAtNiBjb2RpbmcgZm9yIGNvbXBhcmFiaWxpdHkgdG8gU3R1ZGllcyAyLTQuIAoKRmluYWxseSwgb24gU3R1ZHkgMWMsIHBhcnRpY2lwYW50cyBhc3Nlc3NlZCB0d28gdGFyZ2V0IGNoYXJhY3RlcnMgc2lkZSBieSBzaWRlIChpbiBjb250cmFzdCB0byBTdHVkaWVzIDFhLCAxYiwgYW5kIDFkLCBpbiB3aGljaCBlYWNoIHBhcnRpY2lwYW50IGFzc2Vzc2VkIGp1c3Qgb25lIHRhcmdldCBjaGFyYWN0ZXIpLiBJbiB0aGUgY3VycmVudCBhbmFseXNlcyAoYXMgaW4gdGhlIG9yaWdpbmFsIHB1YmxpY2F0aW9uIG9mIHRoZXNlIHJlc3VsdHM7IFdlaXNtYW4gZXQgYWwuLCAyMDE3KSwgSSB0cmVhdCBlYWNoIHBhcnRpY2lwYW50J3MgYXNzZXNzbWVudHMgb2YgZWFjaCB0YXJnZXQgY2hhcmFjdGVyIGFzIGEgc2VwYXJhdGUgc2V0IG9mIG9ic2VydmF0aW9ucyAoYXMgaWYgdGhleSBjYW1lIGZyb20gZGlmZmVyZW50IHBhcnRpY2lwYW50cyksIGluIGVmZmVjdCBkb3VibGluZyB0aGUgc2FtcGxlIHNpemUgZm9yIHRoZXNlIHN0dWRpZXMgKGJ1dCBpZ25vcmluZyB0aGUgd2l0aGluLXN1YmplY3QgZGVzaWduKS4KCiMjIFJlc3VsdHMKCmBgYHtyfQpyZXRlbl9yZXBvcnQgPC0gbGlzdCgiU3R1ZHkgMWEiID0gZDFhX2FkX3dpZGVfaSwgCiAgICAgICAgICAgICAgICAgICAgICJTdHVkeSAxYiIgPSBkMWJfYWRfd2lkZV9pLAogICAgICAgICAgICAgICAgICAgICAiU3R1ZHkgMWMiID0gZDFjX2FkX3dpZGVfaSwgCiAgICAgICAgICAgICAgICAgICAgICJTdHVkeSAxZCIgPSBkMWRfYWRfd2lkZV9pLAogICAgICAgICAgICAgICAgICAgICAiU3R1ZHkgMjogQWR1bHRzIiA9IGQyX2FkX3dpZGVfaSwKICAgICAgICAgICAgICAgICAgICAgIlN0dWR5IDI6IENoaWxkcmVuICg3LTl5KSIgPSBkMl83OV93aWRlX2ksCiAgICAgICAgICAgICAgICAgICAgICJTdHVkeSAzOiBBZHVsdHMiID0gZDNfYWRfd2lkZV9pLAogICAgICAgICAgICAgICAgICAgICAiU3R1ZHkgMzogT2xkZXIgY2hpbGRyZW4gKDctOXkpIiA9IGQzXzc5X3dpZGVfaSwKICAgICAgICAgICAgICAgICAgICAgIlN0dWR5IDM6IFlvdW5nZXIgY2hpbGRyZW4gKDQtNnkpIiA9IGQzXzQ2X3dpZGVfaSwKICAgICAgICAgICAgICAgICAgICAgIlN0dWR5IDQ6IEFkdWx0cyIgPSBkNF9hZF93aWRlX2ksCiAgICAgICAgICAgICAgICAgICAgICJTdHVkeSA0OiBDaGlsZHJlbiAoNC01eSkiID0gZDRfNDZfd2lkZV9pKSAlPiUgCiAgcmV0ZW5fcmVwb3J0X2Z1bigpCmBgYAoKYGBge3J9CnJldGVuX3JlcG9ydF9ieXByb3RvY29sIDwtIHJldGVuX3JlcG9ydCAlPiUgCiAgZ2F0aGVyKHByb3RvY29sLCBuZmFjdCkgJT4lIAogIGdyb3VwX2J5KHByb3RvY29sKSAlPiUgCiAgc3VtbWFyaXNlKG1pbiA9IG1pbihuZmFjdCksIAogICAgICAgICAgICBtYXggPSBtYXgobmZhY3QpLCAKICAgICAgICAgICAgbWVhbiA9IG1lYW4obmZhY3QpLCAKICAgICAgICAgICAgbWVkaWFuID0gbWVkaWFuKG5mYWN0KSkgJT4lCiAgdW5ncm91cCgpCgpyZXRlbl9yZXBvcnRfYnlwcm90b2NvbApgYGAKCmBgYHtyfQpyZXRlbl9yZXBvcnRfYnlzdHVkeSA8LSByZXRlbl9yZXBvcnQgJT4lIAogIHJvd25hbWVzX3RvX2NvbHVtbigic3R1ZHkiKSAlPiUKICBnYXRoZXIocHJvdG9jb2wsIG5mYWN0LCAtc3R1ZHkpICU+JSAKICBncm91cF9ieShzdHVkeSkgJT4lIAogIHN1bW1hcmlzZShtaW4gPSBtaW4obmZhY3QpLCAKICAgICAgICAgICAgbWF4ID0gbWF4KG5mYWN0KSwgCiAgICAgICAgICAgIG1lYW4gPSBtZWFuKG5mYWN0KSwgCiAgICAgICAgICAgIG1lZGlhbiA9IG1lZGlhbihuZmFjdCkpICU+JQogIHVuZ3JvdXAoKQoKcmV0ZW5fcmVwb3J0X2J5c3R1ZHkKYGBgCgojIyMgU3R1ZHkgMWEKCkluIFN0dWR5IDFhLCBgciBucm93KGQxYV9hZF93aWRlKWAgVVMgYWR1bHRzIGVhY2ggYXNzZXNzZWQgYSBzaW5nbGUgdGFyZ2V0IGNoYXJhY3RlciBvbiA0MCBtZW50YWwgY2FwYWNpdGllcy4gVGhpcyBzdHVkeSBlbXBsb3llZCB0aGUgImVkZ2UgY2FzZSIgdmFyaWFudCBvZiB0aGUgZ2VuZXJhbCBhcHByb2FjaCwgd2l0aCBwYXJ0aWNpcGFudHMgcmFuZG9tbHkgYXNzaWduZWQgdG8gYXNzZXNzIGVpdGhlciBhIGJlZXRsZSBvciBhIHJvYm90LiAoU2VlIENoYXB0ZXIgSUkgYW5kIFdlaXNtYW4gZXQgYWwuLCAyMDE3LCBmb3IgZGV0YWlsZWQgbWV0aG9kcy4pCgojIyMjIEhvdyBtYW55IGNvbmNlcHR1YWwgdW5pdHM/CgpgYGB7cn0KcmV0ZW5fcmVwb3J0WyJTdHVkeSAxYSIsXQpgYGAKCmBgYHtyfQplZmFfcGFyX2QxYV9hZCA8LSBmYV9mdW4oZDFhX2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSAxYSIsICJwYXIiXSkKZWZhX2JpY19kMWFfYWQgPC0gZmFfZnVuKGQxYV9hZF93aWRlX2ksIHJldGVuX3JlcG9ydFsiU3R1ZHkgMWEiLCAiYmljIl0pCmVmYV93ZG1fZDFhX2FkIDwtIGZhX2Z1bihkMWFfYWRfd2lkZV9pLCByZXRlbl9yZXBvcnRbIlN0dWR5IDFhIiwgIndkbSJdKQoKc2F2ZVJEUyhlZmFfcGFyX2QxYV9hZCwgZmlsZSA9ICIuL2VmYXMvZWZhX3Bhcl9kMWFfYWQiKQpzYXZlUkRTKGVmYV9iaWNfZDFhX2FkLCBmaWxlID0gIi4vZWZhcy9lZmFfYmljX2QxYV9hZCIpCnNhdmVSRFMoZWZhX3dkbV9kMWFfYWQsIGZpbGUgPSAiLi9lZmFzL2VmYV93ZG1fZDFhX2FkIikKCiMgZWZhX3Bhcl9kMWFfYWQgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfcGFyX2QxYV9hZCIpCiMgZWZhX2JpY19kMWFfYWQgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfYmljX2QxYV9hZCIpCiMgZWZhX3dkbV9kMWFfYWQgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfd2RtX2QxYV9hZCIpCmBgYAoKYGBge3J9CmVmYV9iaWNfZDFhX2FkJFZhY2NvdW50ZWQgJT4lIGRhdGEuZnJhbWUoKSAlPiUgcm91bmQoMikKbG9hZGluZ3NfY291bnRfZG9tX2Z1bihlZmFfYmljX2QxYV9hZCkKbG9hZGluZ3Nfc3VtbWFyaXplX2Z1bihlZmFfYmljX2QxYV9hZCkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKC1mYWN0b3IpLCBmdW5zKHJvdW5kKC4sIDIpKSkKYGBgCgpUd28gb2YgdGhlIHRocmVlIHByb3RvY29scyBmb3IgZGV0ZXJtaW5pbmcgaG93IG1hbnkgZmFjdG9ycyB0byByZXRhaW4gKHBhcmFsbGVsIGFuYWx5c2lzIGFuZCB0aGUgZmFjdG9yIHJldGVudGlvbiBjcml0ZXJpYSByZXBvcnRlZCBpbiB0aGUgb3JpZ2luYWwgcHVibGljYXRpb24gb2YgU3R1ZHkgMTsgV2Vpc21hbiBldCBhbC4sIDIwMTcpIHN1Z2dlc3RlZCByZXRhaW5pbmcgdGhyZWUgZmFjdG9ycywgd2hpbGUgdGhlIHRoaXJkIChtaW5pbWl6aW5nIEJJQykgc3VnZ2VzdGVkIHJldGFpbmluZyBmaXZlIGZhY3RvcnM7IHNlZSBUYWJsZSAzLjEuIAoKVGhyZWUgb2YgdGhlIGZpdmUgZmFjdG9ycyBzdWdnZXN0ZWQgYnkgbWluaW1pemluZyBCSUMgd2VyZSBxdWFsaXRhdGl2ZWx5IHZlcnkgc2ltaWxhciB0byB0aGUgdGhyZWUgZmFjdG9ycyBzdWdnZXN0ZWQgYnkgdGhlIG90aGVyIHByb3RvY29scywgYW5kIGV2ZW4gaW4gdGhlIDUtZmFjdG9yIHNvbHV0aW9uIHRoZXNlIHRocmVlIGZhY3RvcnMgdG9nZXRoZXIgYWNjb3VudGVkIGZvciBmdWxseSBgciBlZmFfYmljX2QxYV9hZCRWYWNjb3VudGVkWyJDdW11bGF0aXZlIFByb3BvcnRpb24iLCAiRjMiXSAlPiUgcm91bmQoMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlLiBUaGUgZm91cnRoIGFuZCBmaWZ0aCBmYWN0b3JzIGVhY2ggYWNjb3VudGVkIGZvciA8YHIgZWZhX2JpY19kMWFfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCBjKCJGNCIsICJGNSIpXSAlPiUgbWF4KCkgJT4lIGNlaWxpbmdfZGVjKDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSwgYW5kIG5laXRoZXIgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIGFueSBvZiB0aGUgNDAgbWVudGFsIGNhcGFjaXRpZXMgaW5jbHVkZWQgaW4gdGhpcyBzdHVkeS4gSW5kZWVkLCBmYWN0b3IgbG9hZGluZ3MgZm9yIHRoZXNlIHR3byBmYWN0b3JzIHdlcmUgYWxsIHF1aXRlIHdlYWsgKGFic29sdXRlIGxvYWRpbmdzIGFsbCA8YHIgZGF0YS5mcmFtZShsb2FkaW5nc19zdW1tYXJpemVfZnVuKGVmYV9iaWNfZDFhX2FkKSAlPiUgZmlsdGVyKGZhY3RvciAlaW4lIGMoIkY0IiwgIkY1IikpKSRtYXhfYWJzICU+JSBtYXgoKSAlPiUgY2VpbGluZ19kZWMoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWApLiBHaXZlbiBhbGwgdGhpcywgSSB3aWxsIGxpbWl0IG15IGludGVycHJldGF0aW9ucyB0byB0aGUgdGhyZWUtZmFjdG9yIHNvbHV0aW9uOyBzZWUgQXBwZW5kaXggQSBmb3IgdGhlIDUtZmFjdG9yIHNvbHV0aW9uLgoKYGBge3J9CnRhYmxlMy4xIDwtIHJldGVuX3JlcG9ydCAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN0dWR5IikgJT4lCiAgIyBmdWxsX2pvaW4ocmV0ZW5fcmVwb3J0X2J5c3R1ZHkpICU+JQogICMgbXV0YXRlKG1lYW4gPSByb3VuZChtZWFuLCAyKSkgJT4lCiAgbXV0YXRlKGBGb2N1cyBvZiBpbnRlcnByZXRhdGlvbmAgPSBjKHJlcCgiMy1mYWN0b3Igc29sdXRpb24iLCA0KSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzLSBhbmQgNC1mYWN0b3Igc29sdXRpb25zIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwKCIzLWZhY3RvciBzb2x1dGlvbiIsIDMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMi0gYW5kIDMtZmFjdG9yIHNvbHV0aW9ucyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzLWZhY3RvciBzb2x1dGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzLSBhbmQgNC1mYWN0b3Igc29sdXRpb25zIikpICU+JQogIG11dGF0ZShzdHVkeSA9IGdzdWIoIlN0dWR5ICIsICIiLCBzdHVkeSksCiAgICAgICAgIHN0dWR5ID0gZ3N1YigiLlxcOiAiLCAiIiwgc3R1ZHkpKSAlPiUKICByZW5hbWUoYCBgID0gc3R1ZHksIAogICAgICAgICBgUGFyYWxsZWwgYW5hbHlzaXNgID0gcGFyLAogICAgICAgICBgTWluaW1pemluZyBCSUNgID0gYmljLAogICAgICAgICBgV2Vpc21hbiBldCBhbC4gKDIwMTcpYCA9IHdkbSkgJT4lCiAgICAgICAgICMgYG1pbi5gID0gbWluLAogICAgICAgICAjIGBtYXguYCA9IG1heCkgJT4lCiAga2FibGUoZm9ybWF0ID0gImh0bWwiLCAKICAgICAgICBjYXB0aW9uID0gIlRhYmxlIDMuMTogTnVtYmVyIG9mIGZhY3RvcnMgc3VnZ2VzdGVkIGJ5IHRocmVlIGZhY3RvciByZXRlbnRpb24gcHJvdG9jb2xzOiBwYXJhbGxlbCBhbmFseXNpcywgbWluaW1pemluZyBCSUMsIGFuZCB0aGUgZmFjdG9yIHJldGVudGlvbiBjcml0ZXJpYSBzcGVjaWZpZWQgaW4gV2Vpc21hbiBldCBhbC4gKDIwMTcpLiBSZXN1bHRzIGFyZSBncm91cGVkIGJ5IHN0dWR5IGFuZCBhZ2UgZ3JvdXAuIFRoZSBmaW5hbCBjb2x1bW4gZ2l2ZXMgdGhlIGZvY3VzIG9mIG15IGludGVycHJldGF0aW9uIGluIENoYXB0ZXIgSUlJOyBzZWUgQXBwZW5kaXggQSBmb3IgYWRkaXRpb25hbCBzb2x1dGlvbnMgbm90IHJlcG9ydGVkIGluIHRoaXMgY2hhcHRlci4iKSAlPiUgIAogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJTdHVkeSAxOiBBbiBhZHVsdCBlbmRwb2ludCIsIDEsIDQpICU+JQogIGdyb3VwX3Jvd3MoIlN0dWR5IDI6IENvbmNlcHR1YWwgY2hhbmdlIGJldHdlZW4gbWlkZGxlIGNoaWxkaG9vZCAoNy05eSkgYW5kIGFkdWx0aG9vZCIsIDUsIDYpICU+JQogIGdyb3VwX3Jvd3MoIlN0dWR5IDM6IENvbmNlcHR1YWwgY2hhbmdlIG92ZXIgZWFybHkgYW5kIG1pZGRsZSBjaGlsZGhvb2QgKDQtOXkpIiwgNywgOSkgJT4lCiAgZ3JvdXBfcm93cygiU3R1ZHkgNDogQSBmb2N1cyBvbiBlYXJseSBjaGlsZGhvb2QgKDQtNXkpIiwgMTAsIDExKSAlPiUKICAjIGFkZF9oZWFkZXJfYWJvdmUoYygiICIgPSAxLCAiUHJvdG9jb2wgYWx0ZXJuYXRpdmVzIiA9IDMsIAogICMgICAgICAgICAgICAgICAgICAgICJTdW1tYXJ5IG9mIHN1Z2dlc3Rpb25zIiA9IDQpKSAlPiUKICBjb2x1bW5fc3BlYyg0LCBib3JkZXJfcmlnaHQgPSBUKQpgYGAKCmBgYHtyIHRhYmxlMy4xLCBpbmNsdWRlID0gVH0KdGFibGUzLjEKYGBgCgojIyMjIFdoYXQgYXJlIHRoZXNlIGNvbmNlcHR1YWwgdW5pdHM/CgpgYGB7cn0KZmFjdG9yX25hbWVzX2VmYV93ZG1fZDFhX2FkIDwtIGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpCmBgYAoKQWZ0ZXIgcm90YXRpb24sIHRoZSBmaXJzdCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgcmVsYXRlZCB0byBiaW9sb2dpY2FsIG5lZWRz4oCUYSBzdWl0ZSBvZiBjYXBhY2l0aWVzIHRoYXQgSSB3aWxsIHJlZmVyIHRvIGFzIEJPRFkgKGEgbGFiZWwgZW1wbG95ZWQgaW4gdGhlIG9yaWdpbmFsIHJlcG9ydGluZyBvZiB0aGlzIHN0dWR5OyBXZWlzbWFuIGV0IGFsLiwgMjAxNykuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QxYV9hZCwgNCwgIkYxIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kMWFfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjEiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbiwgYW5kIGByIHJvdW5kKGVmYV93ZG1fZDFhX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgIkYxIl0sIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4KClRoZSBzZWNvbmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gY2FwYWNpdGllcyBmb3Igc2VsZi0gYW5kIG90aGVyLXJlbGV2YW50IGVtb3Rpb25z4oCUYSBzdWl0ZSBvZiBjYXBhY2l0aWVzIHRoYXQgSSB3aWxsIHJlZmVyIHRvIGFzIEhFQVJUIChhcyBpbiBXZWlzbWFuIGV0IGFsLiwgMjAxNykuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QxYV9hZCwgNCwgIkYyIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kMWFfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjIiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbiwgYW5kIGByIHJvdW5kKGVmYV93ZG1fZDFhX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgIkYyIl0sIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4KClRoZSB0aGlyZCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBhYmlsaXRpZXMgdG8gZGV0ZWN0IGFuZCB1c2UgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVudmlyb25tZW504oCUYSBzdWl0ZSBvZiBjYXBhY2l0aWVzIHRoYXQgSSB3aWxsIHJlZmVyIHRvIGFzIE1JTkQgKGFzIGluIFdlaXNtYW4gZXQgYWwuLCAyMDE3KS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDFhX2FkLCA0LCAiRjMiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfd2RtX2QxYV9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMyJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLCBhbmQgYHIgcm91bmQoZWZhX3dkbV9kMWFfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBWYXIiLCAiRjMiXSwgMikgKiAxMDBgJSBvZiB0aGUgdG90YWwgdmFyaWFuY2UgaW4gcGFydGljaXBhbnRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLgoKVG9nZXRoZXIsIHRoZXNlIHRocmVlIGZhY3RvcnMgYWNjb3VudGVkIGZvciBgciByb3VuZChzdW0oZWZhX3dkbV9kMWFfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBWYXIiLCBdKSwgMikgKiAxMDBgJSBvZiB0aGUgdG90YWwgdmFyaWFuY2UgaW4gcGFydGljaXBhbnRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLgoKU2VlIEZpZ3VyZSAzLjEgZm9yIGFsbCBmYWN0b3IgbG9hZGluZ3MuCgojIyMgU3R1ZHkgMWIKClN0dWR5IDFiIHdhcyBhIGRpcmVjdCByZXBsaWNhdGlvbiBvZiBTdHVkeSAxYTogYHIgbnJvdyhkMWJfYWRfd2lkZSlgIFVTIGFkdWx0cyBlYWNoIGFzc2Vzc2VkIGEgc2luZ2xlIHRhcmdldCBjaGFyYWN0ZXIgKGVpdGhlciBhIGJlZXRsZSBvciBhIHJvYm90KSBvbiA0MCBtZW50YWwgY2FwYWNpdGllcy4gKFNlZSBDaGFwdGVyIElJIGFuZCBXZWlzbWFuIGV0IGFsLiwgMjAxNywgZm9yIGRldGFpbGVkIG1ldGhvZHMuKQoKIyMjIyBIb3cgbWFueSBjb25jZXB0dWFsIHVuaXRzPwoKYGBge3J9CnJldGVuX3JlcG9ydFsiU3R1ZHkgMWIiLF0KYGBgCgpgYGB7cn0KZWZhX3Bhcl9kMWJfYWQgPC0gZmFfZnVuKGQxYl9hZF93aWRlX2ksIHJldGVuX3JlcG9ydFsiU3R1ZHkgMWIiLCAicGFyIl0pCmVmYV9iaWNfZDFiX2FkIDwtIGZhX2Z1bihkMWJfYWRfd2lkZV9pLCByZXRlbl9yZXBvcnRbIlN0dWR5IDFiIiwgImJpYyJdKQplZmFfd2RtX2QxYl9hZCA8LSBmYV9mdW4oZDFiX2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSAxYiIsICJ3ZG0iXSkKCnNhdmVSRFMoZWZhX3Bhcl9kMWJfYWQsIGZpbGUgPSAiLi9lZmFzL2VmYV9wYXJfZDFiX2FkIikKc2F2ZVJEUyhlZmFfYmljX2QxYl9hZCwgZmlsZSA9ICIuL2VmYXMvZWZhX2JpY19kMWJfYWQiKQpzYXZlUkRTKGVmYV93ZG1fZDFiX2FkLCBmaWxlID0gIi4vZWZhcy9lZmFfd2RtX2QxYl9hZCIpCgojIGVmYV9wYXJfZDFiX2FkIDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX3Bhcl9kMWJfYWQiKQojIGVmYV9iaWNfZDFiX2FkIDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX2JpY19kMWJfYWQiKQojIGVmYV93ZG1fZDFiX2FkIDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX3dkbV9kMWJfYWQiKQpgYGAKCmBgYHtyfQplZmFfd2RtX2QxYl9hZCRWYWNjb3VudGVkICU+JSBkYXRhLmZyYW1lKCkgJT4lIHJvdW5kKDIpCmxvYWRpbmdzX2NvdW50X2RvbV9mdW4oZWZhX3dkbV9kMWJfYWQpCmxvYWRpbmdzX3N1bW1hcml6ZV9mdW4oZWZhX3dkbV9kMWJfYWQpICU+JSAKICBtdXRhdGVfYXQodmFycygtZmFjdG9yKSwgZnVucyhyb3VuZCguLCAyKSkpCmBgYAoKYGBge3J9CmVmYV9wYXJfZDFiX2FkJFZhY2NvdW50ZWQgJT4lIGRhdGEuZnJhbWUoKSAlPiUgcm91bmQoMikKbG9hZGluZ3NfY291bnRfZG9tX2Z1bihlZmFfcGFyX2QxYl9hZCkKbG9hZGluZ3Nfc3VtbWFyaXplX2Z1bihlZmFfcGFyX2QxYl9hZCkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKC1mYWN0b3IpLCBmdW5zKHJvdW5kKC4sIDIpKSkKYGBgCgpgYGB7cn0KZWZhX2JpY19kMWJfYWQkVmFjY291bnRlZCAlPiUgZGF0YS5mcmFtZSgpICU+JSByb3VuZCgyKQpsb2FkaW5nc19jb3VudF9kb21fZnVuKGVmYV9iaWNfZDFiX2FkKQpsb2FkaW5nc19zdW1tYXJpemVfZnVuKGVmYV9iaWNfZDFiX2FkKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoLWZhY3RvciksIGZ1bnMocm91bmQoLiwgMikpKQpgYGAKClR3byBvZiB0aGUgdGhyZWUgcHJvdG9jb2xzIGZvciBkZXRlcm1pbmluZyBob3cgbWFueSBmYWN0b3JzIHRvIHJldGFpbiAocGFyYWxsZWwgYW5hbHlzaXMgYW5kIHRoZSBmYWN0b3IgcmV0ZW50aW9uIGNyaXRlcmlhIHJlcG9ydGVkIGluIHRoZSBvcmlnaW5hbCBwdWJsaWNhdGlvbiBvZiBTdHVkeSAxOyBXZWlzbWFuIGV0IGFsLiwgMjAxNykgc3VnZ2VzdGVkIHJldGFpbmluZyB0aHJlZSBmYWN0b3JzLCB3aGlsZSB0aGUgdGhpcmQgKG1pbmltaXppbmcgQklDKSBzdWdnZXN0ZWQgcmV0YWluaW5nIGZvdXIgZmFjdG9yczsgc2VlIFRhYmxlIDMuMS4gCgpUaHJlZSBvZiB0aGUgZm91ciBmYWN0b3JzIHN1Z2dlc3RlZCBieSBtaW5pbWl6aW5nIEJJQyB3ZXJlIHF1YWxpdGF0aXZlbHkgdmVyeSBzaW1pbGFyIHRvIHRoZSB0aHJlZSBmYWN0b3JzIHN1Z2dlc3RlZCBieSB0aGUgb3RoZXIgcHJvdG9jb2xzLCBhbmQgdG9nZXRoZXIgYWNjb3VudGVkIGZvciBmdWxseSBgciBlZmFfYmljX2QxYl9hZCRWYWNjb3VudGVkWyJDdW11bGF0aXZlIFByb3BvcnRpb24iLCAiRjMiXSAlPiUgcm91bmQoMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlLiBUaGUgZm91cnRoIGZhY3RvciBhY2NvdW50ZWQgZm9yIG9ubHkgYHIgZWZhX2JpY19kMWJfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjQiXSAlPiUgcm91bmQoMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlLCBhbmQgd2FzIG5vdCB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBhbnkgb2YgdGhlIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGluY2x1ZGVkIGluIHRoaXMgc3R1ZHksIHdpdGggd2VhayBsb2FkaW5ncyBmb3IgYWxsIGNhcGFjaXRpZXMgKGFic29sdXRlIGxvYWRpbmdzIGFsbCA8YHIgZGF0YS5mcmFtZShsb2FkaW5nc19zdW1tYXJpemVfZnVuKGVmYV9iaWNfZDFiX2FkKSAlPiUgZmlsdGVyKGZhY3RvciA9PSAiRjQiKSkkbWF4X2FicyAlPiUgbWF4KCkgJT4lIGNlaWxpbmdfZGVjKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgKS4gCgpHaXZlbiBhbGwgdGhpcywgSSB3aWxsIGFnYWluIGZvY3VzIHRoZSByZW1haW5kZXIgb2YgbXkgYW5hbHlzZXMgb24gdGhlIHRocmVlLWZhY3RvciBzb2x1dGlvbjsgc2VlIEFwcGVuZGl4IEEgZm9yIHRoZSBmb3VyLWZhY3RvciBzb2x1dGlvbi4KCiMjIyMgV2hhdCBhcmUgdGhlc2UgY29uY2VwdHVhbCB1bml0cz8KCmBgYHtyfQpmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWJfYWQgPC0gYygiQk9EWSIsICJIRUFSVCIsICJNSU5EIikKYGBgCgpBZnRlciByb3RhdGlvbiwgdGhlIGZpcnN0IGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHRoZSBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgdGhhdCBJIGxhYmVsZWQgQk9EWSBpbiBTdHVkeSAxYSAoc2VlIGFsc28gV2Vpc21hbiBldCBhbC4sIDIwMTcpLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kMWJfYWQsIDQsICJGMSIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDFiX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYxIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24sIGFuZCBgciByb3VuZChlZmFfd2RtX2QxYl9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIFZhciIsICJGMSJdLCAyKSAqIDEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuCgpUaGUgc2Vjb25kIGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHRoZSBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyB0aGF0IEkgbGFiZWxlZCBIRUFSVCBpbiBTdHVkeSAxYSAoc2VlIGFsc28gV2Vpc21hbiBldCBhbC4sIDIwMTcpLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kMWJfYWQsIDQsICJGMiIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDFiX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYyIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24sIGFuZCBgciByb3VuZChlZmFfd2RtX2QxYl9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIFZhciIsICJGMiJdLCAyKSAqIDEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuCgpUaGUgdGhpcmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gdGhlIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyB0aGF0IEkgcmVmZXJyZWQgdG8gYXMgTUlORCBpbiBTdHVkeSAxYSAoc2VlIGFsc28gV2Vpc21hbiBldCBhbC4sIDIwMTcpLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kMWJfYWQsIDQsICJGMyIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDFiX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYzIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24sIGFuZCBgciByb3VuZChlZmFfd2RtX2QxYl9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIFZhciIsICJGMyJdLCAyKSAqIDEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuIAoKVG9nZXRoZXIsIHRoZXNlIHRocmVlIGZhY3RvcnMgYWNjb3VudGVkIGZvciBgciByb3VuZChzdW0oZWZhX3dkbV9kMWJfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBWYXIiLCBdKSwgMikgKiAxMDBgJSBvZiB0aGUgdG90YWwgdmFyaWFuY2UgaW4gcGFydGljaXBhbnRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLgoKU2VlIEZpZ3VyZSAzLjEgZm9yIGFsbCBmYWN0b3IgbG9hZGluZ3MuCgojIyMgU3R1ZHkgMWMKCkluIFN0dWR5IDFjLCBgciBucm93KGQxY19hZF93aWRlKS8yYCBVUyBhZHVsdHMgZWFjaCBhc3Nlc3NlZCB0d28gdGFyZ2V0IGNoYXJhY3RlcnMgb24gNDAgbWVudGFsIGNhcGFjaXRpZXMuIExpa2UgU3R1ZGllcyAxYSBhbmQgMWIsIHRoaXMgc3R1ZHkgZW1wbG95ZWQgdGhlICJlZGdlIGNhc2UiIHZhcmlhbnQgb2YgdGhlIGdlbmVyYWwgYXBwcm9hY2g7IGJ1dCBpbiB0aGlzIHN0dWR5LCBhbGwgcGFydGljaXBhbnRzIGFzc2Vzc2VkIGJvdGggb2YgdGhlc2UgdGFyZ2V0IGNoYXJhY3RlcnMgc2lkZSBieSBzaWRlICh3aXRoIGxlZnQtcmlnaHQgcG9zaXRpb24gY291bnRlcmJhbGFuY2VkIGFjcm9zcyBwYXJ0aWNpcGFudHMpLiAoU2VlIENoYXB0ZXIgSUkgYW5kIFdlaXNtYW4gZXQgYWwuLCAyMDE3LCBmb3IgZGV0YWlsZWQgbWV0aG9kcy4pCgojIyMjIEhvdyBtYW55IGNvbmNlcHR1YWwgdW5pdHM/CgpgYGB7cn0KcmV0ZW5fcmVwb3J0WyJTdHVkeSAxYyIsXQpgYGAKCmBgYHtyfQplZmFfcGFyX2QxY19hZCA8LSBmYV9mdW4oZDFjX2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSAxYyIsICJwYXIiXSkKZWZhX2JpY19kMWNfYWQgPC0gZmFfZnVuKGQxY19hZF93aWRlX2ksIHJldGVuX3JlcG9ydFsiU3R1ZHkgMWMiLCAiYmljIl0pCmVmYV93ZG1fZDFjX2FkIDwtIGZhX2Z1bihkMWNfYWRfd2lkZV9pLCByZXRlbl9yZXBvcnRbIlN0dWR5IDFjIiwgIndkbSJdKQoKc2F2ZVJEUyhlZmFfcGFyX2QxY19hZCwgZmlsZSA9ICIuL2VmYXMvZWZhX3Bhcl9kMWNfYWQiKQpzYXZlUkRTKGVmYV9iaWNfZDFjX2FkLCBmaWxlID0gIi4vZWZhcy9lZmFfYmljX2QxY19hZCIpCnNhdmVSRFMoZWZhX3dkbV9kMWNfYWQsIGZpbGUgPSAiLi9lZmFzL2VmYV93ZG1fZDFjX2FkIikKCiMgZWZhX3Bhcl9kMWNfYWQgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfcGFyX2QxY19hZCIpCiMgZWZhX2JpY19kMWNfYWQgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfYmljX2QxY19hZCIpCiMgZWZhX3dkbV9kMWNfYWQgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfd2RtX2QxY19hZCIpCmBgYAoKYGBge3J9CmVmYV9iaWNfZDFjX2FkJFZhY2NvdW50ZWQgJT4lIGRhdGEuZnJhbWUoKSAlPiUgcm91bmQoMikKbG9hZGluZ3NfY291bnRfZG9tX2Z1bihlZmFfYmljX2QxY19hZCkKbG9hZGluZ3Nfc3VtbWFyaXplX2Z1bihlZmFfYmljX2QxY19hZCkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKC1mYWN0b3IpLCBmdW5zKHJvdW5kKC4sIDIpKSkKYGBgCgpUaGUgZmFjdG9yIHJldGVudGlvbiBjcml0ZXJpYSByZXBvcnRlZCBpbiB0aGUgb3JpZ2luYWwgcHVibGljYXRpb24gb2YgU3R1ZHkgMSAoV2Vpc21hbiBldCBhbC4sIDIwMTcpIHN1Z2dlc3RlZCByZXRhaW5pbmcgdGhyZWUgZmFjdG9ycywgd2hpbGUgdGhlIG90aGVyIHR3byBwcm90b2NvbHMgZm9yIGRldGVybWluaW5nIGhvdyBtYW55IGZhY3RvcnMgdG8gcmV0YWluIChwYXJhbGxlbCBhbmFseXNpcyBhbmQgbWluaW1pemluZyBCSUMpIHN1Z2dlc3RlZCByZXRhaW5pbmcgZm91ciBmYWN0b3JzOyBzZWUgVGFibGUgMy4xLiAKCk11Y2ggYXMgaW4gU3R1ZGllcyAxYSBhbmQgMWIsIHRocmVlIG9mIHRoZSBmb3VyIGZhY3RvcnMgc3VnZ2VzdGVkIGJ5IHBhcmFsbGVsIGFuYWx5c2lzIGFuZCBtaW5pbWl6aW5nIEJJQyB3ZXJlIHF1YWxpdGF0aXZlbHkgdmVyeSBzaW1pbGFyIHRvIHRoZSB0aHJlZSBmYWN0b3JzIHN1Z2dlc3RlZCBieSB0aGUgb3JpZ2luYWwgZmFjdG9yIHJldGVudGlvbiBjcml0ZXJpYSwgYW5kIHRvZ2V0aGVyIGFjY291bnRlZCBmb3IgZnVsbHkgYHIgZWZhX2JpY19kMWNfYWQkVmFjY291bnRlZFsiQ3VtdWxhdGl2ZSBQcm9wb3J0aW9uIiwgIkYzIl0gJT4lIHJvdW5kKDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZS4gVGhlIGZvdXJ0aCBmYWN0b3IgYWNjb3VudGVkIGZvciBvbmx5IGByIGVmYV9iaWNfZDFjX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkY0Il0gJT4lIHJvdW5kKDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBhbmQgd2FzIG5vdCB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBhbnkgb2YgdGhlIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGluY2x1ZGVkIGluIHRoaXMgc3R1ZHksIHdpdGggd2VhayBmYWN0b3IgbG9hZGluZ3MgZm9yIGFsbCBjYXBhY2l0aWVzIChhYnNvbHV0ZSBsb2FkaW5ncyBhbGwgPGByIGRhdGEuZnJhbWUobG9hZGluZ3Nfc3VtbWFyaXplX2Z1bihlZmFfYmljX2QxY19hZCkgJT4lIGZpbHRlcihmYWN0b3IgPT0gIkY0IikpJG1heF9hYnMgJT4lIG1heCgpICU+JSBjZWlsaW5nX2RlYygyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYCkuIEdpdmVuIGFsbCB0aGlzLCBJIHdpbGwgYWdhaW4gZm9jdXMgdGhlIHJlbWFpbmRlciBvZiBteSBhbmFseXNlcyBvbiB0aGUgdGhyZWUtZmFjdG9yIHNvbHV0aW9uOyBzZWUgQXBwZW5kaXggQSBmb3IgdGhlIGZvdXItZmFjdG9yIHNvbHV0aW9uLgoKIyMjIyBXaGF0IGFyZSB0aGVzZSBjb25jZXB0dWFsIHVuaXRzPwoKYGBge3J9CmZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxY19hZCA8LSBjKCJCT0RZIiwgIkhFQVJUIiwgIk1JTkQiKQpgYGAKCkFmdGVyIHJvdGF0aW9uLCB0aGUgZmlyc3QgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gdGhlIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyB0aGF0IEkgbGFiZWxlZCBCT0RZIGluIFN0dWRpZXMgMWEgYW5kIDFiIChzZWUgYWxzbyBXZWlzbWFuIGV0IGFsLiwgMjAxNykuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QxY19hZCwgNCwgIkYxIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kMWNfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjEiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbiwgYW5kIGByIHJvdW5kKGVmYV93ZG1fZDFjX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgIkYxIl0sIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4KClRoZSBzZWNvbmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gdGhlIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHRoYXQgSSBsYWJlbGVkIEhFQVJUIGluIFN0dWRpZXMgMWEgYW5kIDFiIChzZWUgYWxzbyBXZWlzbWFuIGV0IGFsLiwgMjAxNykuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QxY19hZCwgNCwgIkYyIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kMWNfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjIiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbiwgYW5kIGByIHJvdW5kKGVmYV93ZG1fZDFjX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgIkYyIl0sIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4KClRoZSB0aGlyZCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byB0aGUgcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIHRoYXQgSSByZWZlcnJlZCB0byBhcyBNSU5EIGluIFN0dWRpZXMgMWEgYW5kIDFiIChzZWUgYWxzbyBXZWlzbWFuIGV0IGFsLiwgMjAxNykuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QxY19hZCwgNCwgIkYzIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kMWNfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjMiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbiwgYW5kIGByIHJvdW5kKGVmYV93ZG1fZDFjX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgIkYzIl0sIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4KClRvZ2V0aGVyLCB0aGVzZSB0aHJlZSBmYWN0b3JzIGFjY291bnRlZCBmb3IgYHIgcm91bmQoc3VtKGVmYV93ZG1fZDFjX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgXSksIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4KClNlZSBGaWd1cmUgMy4xIGZvciBhbGwgZmFjdG9yIGxvYWRpbmdzLgoKIyMjIFN0dWR5IDFkCgpJbiBTdHVkeSAxZCwgYHIgbnJvdyhkMWRfYWRfd2lkZSlgIFVTIGFkdWx0cyBlYWNoIGFzc2Vzc2VkIGEgc2luZ2xlIHRhcmdldCBjaGFyYWN0ZXIgb24gNDAgbWVudGFsIGNhcGFjaXRpZXMuIFVubGlrZSBTdHVkaWVzIDFhLTFjLCB0aGlzIHN0dWR5IGVtcGxveWVkIHRoZSAibWFueSBjaGFyYWN0ZXJzIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGFwcHJvYWNoLCBpbiB3aGljaCBwYXJ0aWNpcGFudHMgd2VyZSByYW5kb21seSBhc3NpZ25lZCB0byBhc3Nlc3Mgb25lIG9mIHRoZSBmb2xsb3dpbmcgMjEgdGFyZ2V0IGNoYXJhY3RlcnM6IGFuIGFkdWx0LCBhIGNoaWxkLCBhbiBpbmZhbnQsIGEgcGVyc29uIGluIGEgcGVyc2lzdGVudCB2ZWdldGF0aXZlIHN0YXRlLCBhIGZldHVzLCBhIGNoaW1wYW56ZWUsIGFuIGVsZXBoYW50LCBhIGRvbHBoaW4sIGEgYmVhciwgYSBkb2csIGEgZ29hdCwgYSBtb3VzZSwgYSBmcm9nLCBhIGJsdWUgamF5LCBhIGZpc2gsIGEgYmVldGxlLCBhIG1pY3JvYmUsIGEgcm9ib3QsIGEgY29tcHV0ZXIsIGEgY2FyLCBvciBhIHN0YXBsZXIuIChTZWUgQ2hhcHRlciBJSSBhbmQgV2Vpc21hbiBldCBhbC4sIDIwMTcsIGZvciBkZXRhaWxlZCBtZXRob2RzLikKCiMjIyMgSG93IG1hbnkgY29uY2VwdHVhbCB1bml0cz8KCmBgYHtyfQpyZXRlbl9yZXBvcnRbIlN0dWR5IDFkIixdCmBgYAoKYGBge3J9CmVmYV9wYXJfZDFkX2FkIDwtIGZhX2Z1bihkMWRfYWRfd2lkZV9pLCByZXRlbl9yZXBvcnRbIlN0dWR5IDFkIiwgInBhciJdKQplZmFfYmljX2QxZF9hZCA8LSBmYV9mdW4oZDFkX2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSAxZCIsICJiaWMiXSkKZWZhX3dkbV9kMWRfYWQgPC0gZmFfZnVuKGQxZF9hZF93aWRlX2ksIHJldGVuX3JlcG9ydFsiU3R1ZHkgMWQiLCAid2RtIl0pCgpzYXZlUkRTKGVmYV9wYXJfZDFkX2FkLCBmaWxlID0gIi4vZWZhcy9lZmFfcGFyX2QxZF9hZCIpCnNhdmVSRFMoZWZhX2JpY19kMWRfYWQsIGZpbGUgPSAiLi9lZmFzL2VmYV9iaWNfZDFkX2FkIikKc2F2ZVJEUyhlZmFfd2RtX2QxZF9hZCwgZmlsZSA9ICIuL2VmYXMvZWZhX3dkbV9kMWRfYWQiKQoKIyBlZmFfcGFyX2QxZF9hZCA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV9wYXJfZDFkX2FkIikKIyBlZmFfYmljX2QxZF9hZCA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV9iaWNfZDFkX2FkIikKIyBlZmFfd2RtX2QxZF9hZCA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV93ZG1fZDFkX2FkIikKYGBgCgpgYGB7cn0KZWZhX3dkbV9kMWRfYWQkVmFjY291bnRlZCAlPiUgZGF0YS5mcmFtZSgpICU+JSByb3VuZCgyKQpsb2FkaW5nc19jb3VudF9kb21fZnVuKGVmYV93ZG1fZDFkX2FkKQpsb2FkaW5nc19zdW1tYXJpemVfZnVuKGVmYV93ZG1fZDFkX2FkKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoLWZhY3RvciksIGZ1bnMocm91bmQoLiwgMikpKQpgYGAKCmBgYHtyfQplZmFfcGFyX2QxZF9hZCRWYWNjb3VudGVkICU+JSBkYXRhLmZyYW1lKCkgJT4lIHJvdW5kKDIpCmxvYWRpbmdzX2NvdW50X2RvbV9mdW4oZWZhX3Bhcl9kMWRfYWQpCmxvYWRpbmdzX3N1bW1hcml6ZV9mdW4oZWZhX3Bhcl9kMWRfYWQpICU+JSAKICBtdXRhdGVfYXQodmFycygtZmFjdG9yKSwgZnVucyhyb3VuZCguLCAyKSkpCmBgYAoKYGBge3J9CmVmYV9iaWNfZDFkX2FkJFZhY2NvdW50ZWQgJT4lIGRhdGEuZnJhbWUoKSAlPiUgcm91bmQoMikKbG9hZGluZ3NfY291bnRfZG9tX2Z1bihlZmFfYmljX2QxZF9hZCkKbG9hZGluZ3Nfc3VtbWFyaXplX2Z1bihlZmFfYmljX2QxZF9hZCkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKC1mYWN0b3IpLCBmdW5zKHJvdW5kKC4sIDIpKSkKYGBgCgpFYWNoIG9mIHRoZSB0aHJlZSBmYWN0b3IgcmV0ZW50aW9uIHByb3RvY29scyBzdWdnZXN0ZWQgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGZhY3RvcnMgdG8gcmV0YWluOyBzZWUgVGFibGUgMy4xLgoKVGhlIHJldGVudGlvbiBjcml0ZXJpYSB1c2VkIGluIHRoZSBvcmlnaW5hbCByZXBvcnRpbmcgb2YgdGhpcyBzdHVkeSAoV2Vpc21hbiBldCBhbC4sIDIwMTcpIHN1Z2dlc3RlZCByZXRhaW5pbmcgdGhyZWUgZmFjdG9ycy4gCgpQYXJhbGxlbCBhbmFseXNpcyBzdWdnZXN0ZWQgcmV0YWluaW5nIGZvdXIgZmFjdG9ycy4gSG93ZXZlciwgdGhyZWUgb2YgdGhlc2UgZm91ciBmYWN0b3JzIHdlcmUgcXVhbGl0YXRpdmVseSB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHRocmVlIGZhY3RvcnMgc3VnZ2VzdGVkIGJ5IFdlaXNtYW4gZXQgYWwuJ3MgKDIwMTcpIG9yaWdpbmFsIHJldGVudGlvbiBjcml0ZXJpYSwgYW5kIHRvZ2V0aGVyIGFjY291bnRlZCBmb3IgZnVsbHkgYHIgZWZhX3Bhcl9kMWRfYWQkVmFjY291bnRlZFsiQ3VtdWxhdGl2ZSBQcm9wb3J0aW9uIiwgIkYzIl0gJT4lIHJvdW5kKDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZS4gVGhlIGZvdXJ0aCBmYWN0b3IgYWNjb3VudGVkIGZvciBvbmx5IGByIGVmYV9wYXJfZDFkX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkY0Il0gJT4lIHJvdW5kKDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBhbmQgd2FzIG5vdCB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBhbnkgb2YgdGhlIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGluY2x1ZGVkIGluIHRoaXMgc3R1ZHksIHdpdGggd2VhayBsb2FkaW5ncyBmb3IgYWxsIGNhcGFjaXRpZXMgKGFic29sdXRlIGxvYWRpbmdzIGFsbCA8YHIgZGF0YS5mcmFtZShsb2FkaW5nc19zdW1tYXJpemVfZnVuKGVmYV9wYXJfZDFkX2FkKSAlPiUgZmlsdGVyKGZhY3RvciA9PSAiRjQiKSkkbWF4X2FicyAlPiUgbWF4KCkgJT4lIGNlaWxpbmdfZGVjKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgKS4gCgpMaWtld2lzZSwgbWluaW1pemluZyBCSUMgc3VnZ2VzdGVkIHJldGFpbmluZyBmaXZlIGZhY3RvcnMsIGJ1dCB0aHJlZSBvZiB0aGVzZSBmaXZlIGZhY3RvcnMgd2VyZSBxdWFsaXRhdGl2ZWx5IHZlcnkgc2ltaWxhciB0byB0aGUgdGhyZWUgZmFjdG9ycyBzdWdnZXN0ZWQgYnkgdGhlIG9yaWdpbmFsIHJldGVudGlvbiBjcml0ZXJpYSwgYW5kIHRvZ2V0aGVyIGFjY291bnRlZCBmb3IgZnVsbHkgYHIgZWZhX2JpY19kMWRfYWQkVmFjY291bnRlZFsiQ3VtdWxhdGl2ZSBQcm9wb3J0aW9uIiwgIkYzIl0gJT4lIHJvdW5kKDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZS4gVGhlIGZvdXJ0aCBhbmQgZmlmdGggZmFjdG9ycyBlYWNoIGFjY291bnRlZCBmb3IgPGByIGVmYV9iaWNfZDFkX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgYygiRjQiLCAiRjUiKV0gJT4lIG1heCgpICU+JSBjZWlsaW5nX2RlYygyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UsIGFuZCBuZWl0aGVyIHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBhbnkgb2YgdGhlIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGluY2x1ZGVkIGluIHRoaXMgc3R1ZHkuIEluZGVlZCwgZmFjdG9yIGxvYWRpbmdzIGZvciB0aGVzZSB0d28gZmFjdG9ycyB3ZXJlIGFsbCBxdWl0ZSB3ZWFrIChhYnNvbHV0ZSBsb2FkaW5ncyBhbGwgPGByIGRhdGEuZnJhbWUobG9hZGluZ3Nfc3VtbWFyaXplX2Z1bihlZmFfYmljX2QxZF9hZCkgJT4lIGZpbHRlcihmYWN0b3IgJWluJSBjKCJGNCIsICJGNSIpKSkkbWF4X2FicyAlPiUgbWF4KCkgJT4lIGNlaWxpbmdfZGVjKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgKS4gCgpHaXZlbiBhbGwgdGhpcywgSSB3aWxsIG9uY2UgbW9yZSBmb2N1cyB0aGUgcmVtYWluZGVyIG9mIG15IGFuYWx5c2VzIG9uIHRoZSB0aHJlZS1mYWN0b3Igc29sdXRpb247IHNlZSBBcHBlbmRpeCBBIGZvciB0aGUgNC0gYW5kIDUtZmFjdG9yIHNvbHV0aW9ucy4KCiMjIyMgV2hhdCBhcmUgdGhlc2UgY29uY2VwdHVhbCB1bml0cz8KCmBgYHtyfQpmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWRfYWQgPC0gYygiQk9EWSIsICJIRUFSVCIsICJNSU5EIikKYGBgCgpBZnRlciByb3RhdGlvbiwgdGhlIGZpcnN0IGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHRoZSBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgdGhhdCBJIGxhYmVsZWQgQk9EWSBpbiBTdHVkaWVzIDFhLTFjIChzZWUgYWxzbyBXZWlzbWFuIGV0IGFsLiwgMjAxNykuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QxZF9hZCwgNCwgIkYxIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kMWRfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjEiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbiwgYW5kIGByIHJvdW5kKGVmYV93ZG1fZDFkX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgIkYxIl0sIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4KClRoZSBzZWNvbmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gdGhlIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHRoYXQgSSBsYWJlbGVkIEhFQVJUIGluIFN0dWRpZXMgMWEtMWMgKHNlZSBhbHNvIFdlaXNtYW4gZXQgYWwuLCAyMDE3KS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDFkX2FkLCA0LCAiRjIiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfd2RtX2QxZF9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMiJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLCBhbmQgYHIgcm91bmQoZWZhX3dkbV9kMWRfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBWYXIiLCAiRjIiXSwgMikgKiAxMDBgJSBvZiB0aGUgdG90YWwgdmFyaWFuY2UgaW4gcGFydGljaXBhbnRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLgoKVGhlIHRoaXJkIGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHRoZSBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBhYmlsaXRpZXMgdGhhdCBJIHJlZmVycmVkIHRvIGFzIE1JTkQgaW4gU3R1ZGllcyAxYS0xYyAoc2VlIGFsc28gV2Vpc21hbiBldCBhbC4sIDIwMTcpLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kMWRfYWQsIDQsICJGMyIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDFkX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYzIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24sIGFuZCBgciByb3VuZChlZmFfd2RtX2QxZF9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIFZhciIsICJGMyJdLCAyKSAqIDEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuCgpUb2dldGhlciwgdGhlc2UgdGhyZWUgZmFjdG9ycyBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKHN1bShlZmFfd2RtX2QxZF9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIFZhciIsIF0pLCAyKSAqIDEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuCgpTZWUgRmlndXJlIDMuMSBmb3IgYWxsIGZhY3RvciBsb2FkaW5ncy4KCmBgYHtyfQpwbG90X2VmYV93ZG1fZDFhX2FkIDwtIGhlYXRtYXBfZnVuKGVmYV93ZG1fZDFhX2FkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWFfYWQpICsKICBsYWJzKHRpdGxlID0gIlN0dWR5IDFhIiwgc3VidGl0bGUgPSAiMy1mYWN0b3Igc29sdXRpb24iKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpwbG90X2VmYV93ZG1fZDFiX2FkIDwtIGhlYXRtYXBfZnVuKGVmYV93ZG1fZDFiX2FkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWJfYWQpICsKICBsYWJzKHRpdGxlID0gIlN0dWR5IDFiIiwgc3VidGl0bGUgPSAiMy1mYWN0b3Igc29sdXRpb24iKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpwbG90X2VmYV93ZG1fZDFjX2FkIDwtIGhlYXRtYXBfZnVuKGVmYV93ZG1fZDFjX2FkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWNfYWQpICsKICBsYWJzKHRpdGxlID0gIlN0dWR5IDFjIiwgc3VidGl0bGUgPSAiMy1mYWN0b3Igc29sdXRpb24iKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpwbG90X2VmYV93ZG1fZDFkX2FkIDwtIGhlYXRtYXBfZnVuKGVmYV93ZG1fZDFkX2FkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWRfYWQpICsKICBsYWJzKHRpdGxlID0gIlN0dWR5IDFkIiwgc3VidGl0bGUgPSAiMy1mYWN0b3Igc29sdXRpb24iKQpgYGAKCmBgYHtyfQpmaWd1cmUzLjEgPC0gcGxvdF9ncmlkKHBsb3RfZWZhX3dkbV9kMWFfYWQsIHBsb3RfZWZhX3dkbV9kMWJfYWQsCiAgICAgICAgICAgICAgICAgICAgICAgcGxvdF9lZmFfd2RtX2QxY19hZCwgcGxvdF9lZmFfd2RtX2QxZF9hZCwKICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSAiQVVUTyIsIG5jb2wgPSA0LCByZWxfd2lkdGhzID0gYygxLCAxLCAxLCAxLjIpKQoKZmlndXJlMy4xX2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTMuMSwgc3RyX3dyYXAoIkZpZ3VyZSAzLjE6IEZhY3RvciBsb2FkaW5ncyBmcm9tIGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNlcyBvZiBTdHVkaWVzIDFhLTFkIChzZWUgYWxzbyBXZWlzbWFuIGV0IGFsLiwgMjAxNykuIChBLUIpIEluIFN0dWRpZXMgMWEgYW5kIDFiLCBVUyBhZHVsdHMgYXNzZXNzZWQgb25lIG9mIHR3byAnZWRnZSBjYXNlJyBjaGFyYWN0ZXJzIChhIGJlZXRsZSBvciBhIHJvYm90KS4gKEMpIEluIFN0dWR5IDFjLCBVUyBhZHVsdHMgYXNzZXNzIGJvdGggb2YgdGhlc2UgJ2VkZ2UgY2FzZXMnIHNpZGUgYnkgc2lkZSAod2l0aCBsZWZ0LXJpZ2h0IHBvc2l0aW9uIGNvdW50ZXJiYWxhbmNlZCBhY3Jvc3MgcGFydGljaXBhbnRzKS4gKEQpIEluIFN0dWR5IDFkLCBVUyBhZHVsdHMgYXNzZXNzZWQgb25lIG9mIDIxIGRpdmVyc2UgdGFyZ2V0IGNoYXJhY3RlcnMuIEluIHRoaXMgYW5kIGFsbCBmaWd1cmVzIHBvcnRyYXlpbmcgZmFjdG9yIGxvYWRpbmdzLCBmYWN0b3JzIGhhdmUgYmVlbiBwbG90dGVkIGluIHRoZSBzYW1lIG9yZGVyIChCT0RZLCBIRUFSVCwgTUlORCksIHdoZW4gYXBwbGljYWJsZSwgdG8gZmFjaWxpdGF0ZSBjb21wYXJpc29uIGFjcm9zcyBzdHVkaWVzLiBBIGZhY3RvciBsb2FkaW5nIG9mICsxIGluZGljYXRlcyBhIHBlcmZlY3RseSBwb3NpdGl2ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBtZW50YWwgY2FwYWNpdHkgYW5kIHVuZGVybHlpbmcgY29uc3RydWN0OyBhIGxvYWRpbmcgb2YgLTEgaW5kaWNhdGVzIGEgcGVyZmVjdGx5IG5lZ2F0aXZlIHJlbGF0aW9uc2hpcC4iLCAyMTApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyIGZpZ3VyZTMuMSwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDksIGZpZy5hc3AgPSAwLjZ9CmdnZHJhdyhmaWd1cmUzLjFfY2FwKQpgYGAKCiMjIERpc2N1c3Npb24KClRoZSBnZW5lcmFsIHBhdHRlcm4gdGhhdCBlbWVyZ2VkIGZyb20gU3R1ZGllcyAxYS0xZCBpcyBjbGVhciBhbmQgYXBwZWFycyB0byBiZSBoaWdobHkgcmVsaWFibGU6IEluIGZvdXIgbGFyZ2Utc2NhbGUgc3R1ZGllcywgVVMgYWR1bHRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zIHdlcmUgYW5jaG9yZWQgYnkgYSB0aHJlZS13YXkgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGUgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIG9mIHRoZSBCT0RZLCB0aGUgc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgb2YgdGhlIEhFQVJULCBhbmQgdGhlIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyBvZiB0aGUgTUlORC4gR2l2ZW4gdGhlIHJhbmdlIG9mIG1lbnRhbCBjYXBhY2l0aWVzIGluY2x1ZGVkIGluIGVhY2ggc3R1ZHksIGEgbnVtYmVyIG9mIGFkZGl0aW9uYWwgb3IgYWx0ZXJuYXRpdmUgZmFjdG9ycyBjb3VsZCBoYXZlIGVtZXJnZWQgKGluY2x1ZGluZyAiZXhwZXJpZW5jZSIgb3IgImFnZW5jeSwiIGFzIGluIEdyYXkgZXQgYWwuJ3MgMjAwNyB3b3JrIG9uIG1pbmQgcGVyY2VwdGlvbikuIE5vbmV0aGVsZXNzLCBhIGNvbW1vbiBzZXQgb2YgZmFjdG9yc+KAlGkuZS4sIGEgc3RhYmxlIHNldCBvZiAiY29uY2VwdHVhbCB1bml0cyLigJRlbWVyZ2VkIGFjcm9zcyBpbmRlcGVuZGVudCBhbmFseXNlcyBvZiBmb3VyIHN0dWRpZXMsIHdoZXRoZXIgcGFydGljaXBhbnRzIGp1ZGdlZCBhIHNpbmdsZSAiZWRnZSBjYXNlIiB0YXJnZXQgY2hhcmFjdGVyIGluIGlzb2xhdGlvbiAoU3R1ZGllcyAxYSBhbmQgMWIpLCBjb21wYXJlZCB0d28gImVkZ2UgY2FzZXMiIHRoYXQgaGlnaGxpZ2h0ZWQgYSBjb250cmFzdCBpbiBiaW9sb2dpY2FsIGFuaW1hY3kgKFN0dWR5IDFjKSwgb3IgZXZhbHVhdGVkIGEgZGl2ZXJzZSByYW5nZSBvZiB0YXJnZXQgY2hhcmFjdGVycywgZnJvbSBpbmVydCBvYmplY3RzIHRvIGNhbm9uaWNhbCBzb2NpYWwgcGFydG5lcnMgKFN0dWR5IDFkKS5Gb3IgYW4gZXh0ZW5kZWQgZGlzY3Vzc2lvbiBvZiB0aGVzZSByZXN1bHRzLCBzZWUgV2Vpc21hbiBldCBhbC4gKDIwMTcpLiAKClN0dWRpZXMgMWEtMWQgcHJvdmlkZSBhIGNsZWFyIGRldmVsb3BtZW50YWwgZW5kcG9pbnQgZm9yIHRoaXMgYXNwZWN0IG9mIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlOiBBcyBhIGdyb3VwLCBVUyBhZHVsdHMgYXBwZWFyIHRvIGhhdmUgYWNjZXNzIHRvIHRocmVlIGZ1bmRhbWVudGFsIGNvbmNlcHR1YWwgdW5pdHPigJRCT0RZLCBIRUFSVCwgYW5kIE1JTkTigJR3aGVuIHJlYXNvbmluZyBhYm91dCB0aGUgbWVudGFsIGxpdmVzIG9mIHZhcmlvdXMgYmVpbmdzIGluIHRoZSB3b3JsZC4gU3R1ZGllcyAyLTQgd2VyZSBkZXNpZ25lZCB0byBleHBsb3JlIHRoZSBkZXZlbG9wbWVudGFsIHRyYWplY3RvcnkgdGhhdCBsZWFkcyB1cCB0byB0aGlzIGVuZHBvaW50OiBIb3cgZG8gVVMgY2hpbGRyZW4gY29tZSB0byByZXByZXNlbnQgbWVudGFsIGxpZmUgaW4gdGhpcyB3YXk/CgoKIyBTdHVkeSAyOiBDb25jZXB0dWFsIGNoYW5nZSBiZXR3ZWVuIG1pZGRsZSBjaGlsZGhvb2QgKDctOXkpIGFuZCBhZHVsdGhvb2QKClN0dWR5IDIgcHJvdmlkZXMgYSBmaXJzdCBnbGltcHNlIG9mIHRoZSBlbWVyZ2VuY2Ugb2YgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUgcHJpb3IgdG8gYWR1bHRob29kLiBJbiB0aGlzIGNoYXB0ZXIsIEkgZm9jdXMgb24gdGhlIGZ1bmRhbWVudGFsIGNvbXBvbmVudHMgb2YgdGhpcyByZXByZXNlbnRhdGlvbjogV2hhdCBhcmUgdGhlIGNvbmNlcHR1YWwgdW5pdHMgYXZhaWxhYmxlIHRvIFVTIGNoaWxkcmVuIGluIHJlYXNvbmluZyBhYm91dCB0aGUgbWVudGFsIGxpdmVzIG9mIHZhcmlvdXMgYmVpbmdzIGluIHRoZSB3b3JsZCwgYW5kIGhvdyBkbyB0aGV5IGNvbXBhcmUgdG8gdGhvc2UgYXZhaWxhYmxlIHRvIFVTIGFkdWx0cyAoYXMgcmV2ZWFsZWQgaW4gU3R1ZHkgMSk/CgpQdXJzdWluZyB0aGlzIHF1ZXN0aW9uIHdpdGggY2hpbGRyZW4gcmVxdWlyZWQgZGV2ZWxvcGluZyBhbiBhZ2UtYXBwcm9wcmlhdGUgZXhwZXJpbWVudGFsIHBhcmFkaWdtLiBJbiBwYXJ0aWN1bGFyLCB0aGUgd29yZGluZyBvZiBzb21lIG9mIHRoZSA0MCBtZW50YWwgY2FwYWNpdGllcyBlbXBsb3llZCBpbiBTdHVkeSAxIHdhcyBtb2RpZmllZCB0byB1c2UgbW9yZSBhZ2UtYXBwcm9wcmlhdGUgdm9jYWJ1bGFyeSwgYW5kIHBhcnRpY2lwYW50cyByZXNwb25kZWQgb24gYSB0aHJlZS1wb2ludCBzY2FsZSAoIm5vLCIgY29kZWQgYXMgMDsgImtpbmRhLCIgY29kZWQgYXMgMC41LCAieWVzLCIgY29kZWQgYXMgMSksICwgcmF0aGVyIHRoYW4gYSBzZXZlbi1wb2ludCBzY2FsZS4gU3R1ZHkgMiBlbXBsb3llZCB0aGUgImVkZ2UgY2FzZSIgdmFyaWFudCBvZiB0aGUgZ2VuZXJhbCBhcHByb2FjaCwgd2l0aCBwYXJ0aWNpcGFudHMgcmFuZG9tbHkgYXNzaWduZWQgdG8gYXNzZXNzIGVpdGhlciBhIGJlZXRsZSBvciBhIHJvYm90LiBBcyBpbiBTdHVkaWVzIDFhLCAxYiwgYW5kIDFkLCBpbiBTdHVkeSAyIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgYSBzaW5nbGUgdGFyZ2V0IGNoYXJhY3RlciBvbiBhbGwgNDAgbWVudGFsIGNhcGFjaXRpZXMuIFRvIHZhbGlkYXRlIHRoZSBtb2RpZmllZCBwYXJhZGlnbSAoaS5lLiwgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXJhZGlnbSBwcm9kdWNlZCBzaW1pbGFyIHJlc3VsdHMgdG8gU3R1ZHkgMSksIGFuZCB0byBwcm92aWRlIGEgZGlyZWN0IGNvbXBhcmlzb24gZm9yIGNoaWxkIHBhcnRpY2lwYW50cywgcGFydGljaXBhbnRzIGluY2x1ZGVkIGEgc2FtcGxlIG9mIGByIG5yb3coZDJfYWRfd2lkZSlgIFVTIGFkdWx0cy4gQXMgYW4gaW5pdGlhbCBmb3JheSBpbnRvIGV4cGxvcmluZyBkZXZlbG9wbWVudCBpbiB0aGlzIGRvbWFpbiwgdGhlIGNoaWxkIHNhbXBsZSBjb25zaXN0ZWQgb2YgYHIgbnJvdyhkMl83OV93aWRlKWAgVVMgY2hpbGRyZW4gYmV0d2VlbiB0aGUgYWdlcyBvZiBgciBzdW1tYXJ5KGQyXzc5JGFnZSlbIk1pbi4iXSAlPiUgcm91bmQoMilgLWByIHN1bW1hcnkoZDJfNzkkYWdlKVsiTWF4LiJdICU+JSByb3VuZCgyKWB5IChtZWRpYW46IGByIHN1bW1hcnkoZDJfNzkkYWdlKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpYHkpLiAoU2VlIENoYXB0ZXIgSUkgZm9yIGRldGFpbGVkIG1ldGhvZHMuKQoKIyMgUmVzdWx0cwoKIyMjIEFkdWx0cwoKIyMjIyBIb3cgbWFueSBjb25jZXB0dWFsIHVuaXRzPwoKYGBge3J9CnJldGVuX3JlcG9ydFsiU3R1ZHkgMjogQWR1bHRzIixdCmBgYAoKYGBge3J9CmVmYV9wYXJfZDJfYWQgPC0gZmFfZnVuKGQyX2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSAyOiBBZHVsdHMiLCAicGFyIl0pCmVmYV9iaWNfZDJfYWQgPC0gZmFfZnVuKGQyX2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSAyOiBBZHVsdHMiLCAiYmljIl0pCmVmYV93ZG1fZDJfYWQgPC0gZmFfZnVuKGQyX2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSAyOiBBZHVsdHMiLCAid2RtIl0pCgpzYXZlUkRTKGVmYV9wYXJfZDJfYWQsIGZpbGUgPSAiLi9lZmFzL2VmYV9wYXJfZDJfYWQiKQpzYXZlUkRTKGVmYV9iaWNfZDJfYWQsIGZpbGUgPSAiLi9lZmFzL2VmYV9iaWNfZDJfYWQiKQpzYXZlUkRTKGVmYV93ZG1fZDJfYWQsIGZpbGUgPSAiLi9lZmFzL2VmYV93ZG1fZDJfYWQiKQoKIyBlZmFfcGFyX2QyX2FkIDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX3Bhcl9kMl9hZCIpCiMgZWZhX2JpY19kMl9hZCA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV9iaWNfZDJfYWQiKQojIGVmYV93ZG1fZDJfYWQgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfd2RtX2QyX2FkIikKYGBgCgpgYGB7cn0KZWZhX3Bhcl9kMl9hZCRWYWNjb3VudGVkICU+JSBkYXRhLmZyYW1lKCkgJT4lIHJvdW5kKDIpCmxvYWRpbmdzX2NvdW50X2RvbV9mdW4oZWZhX3Bhcl9kMl9hZCkKbG9hZGluZ3Nfc3VtbWFyaXplX2Z1bihlZmFfcGFyX2QyX2FkKSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoLWZhY3RvciksIGZ1bnMocm91bmQoLiwgMikpKQpgYGAKClR3byBvZiB0aGUgdGhyZWUgcHJvdG9jb2xzIGZvciBkZXRlcm1pbmluZyBob3cgbWFueSBmYWN0b3JzIHRvIHJldGFpbiAobWluaW1pemluZyBCSUMgYW5kIHRoZSBmYWN0b3IgcmV0ZW50aW9uIGNyaXRlcmlhIGVtcGxveWVkIGluIHRoZSBvcmlnaW5hbCBwdWJsaWNhdGlvbiBvZiBTdHVkeSAxOyBXZWlzbWFuIGV0IGFsLiwgMjAxNykgc3VnZ2VzdGVkIHJldGFpbmluZyB0aHJlZSBmYWN0b3JzLCB3aGlsZSB0aGUgdGhpcmQgKHBhcmFsbGVsIGFuYWx5c2lzKSBzdWdnZXN0ZWQgcmV0YWluaW5nIGZvdXIgZmFjdG9yczsgc2VlIFRhYmxlIDMuMS4gVW5saWtlIGluIFN0dWRpZXMgMWEtMWQsIGluIHdoaWNoIGZhY3RvcnMgYmV5b25kIHRoZSBmaXJzdCB0aHJlZSB1bmlmb3JtbHkgYWNjb3VudGVkIGZvciB2ZXJ5IHNtYWxsIGFtb3VudHMgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSwgd2VyZSBub3QgdGhlIGRvbWluYW50IGZhY3RvciBmb3IgYW55IG1lbnRhbCBjYXBhY2l0aWVzLCBhbmQgdGVuZGVkIHRvIGhhdmUgd2VhayBmYWN0b3IgbG9hZGluZ3MgZm9yIGFsbCBtZW50YWwgY2FwYWNpdGllcywgbm9uZSBvZiB0aGVzZSBjb25zaWRlcmF0aW9ucyBjbGVhcmx5IHJ1bGVzIG91dCB0aGUgZm91cnRoIGZhY3RvciBzdWdnZXN0ZWQgYnkgcGFyYWxsZWwgYW5hbHlzaXMuIEdpdmVuIHRoaXMsIEkgd2lsbCBwcmVzZW50IGFuZCBpbnRlcnByZXQgYm90aCB0aHJlZS0gYW5kIGZvdXItZmFjdG9yIHNvbHV0aW9ucy4KCiMjIyMgV2hhdCBhcmUgdGhlc2UgY29uY2VwdHVhbCB1bml0cz8KCiMjIyMjIFRocmVlLWZhY3RvciBzb2x1dGlvbgoKYGBge3J9CmZhY3Rvcl9uYW1lc19lZmFfd2RtX2QyX2FkIDwtIGMoIkhFQVJUIiwgIkJPRFkiLCAiTUlORCIpCmBgYAoKRmlyc3QsIEkgd2lsbCBleGFtaW5lIHRoZSB0aHJlZS1mYWN0b3Igc29sdXRpb24gc3VnZ2VzdGVkIGJ5IG1pbmltaXppbmcgQklDIGFuZCBieSB0aGUgZmFjdG9yIHJldGVudGlvbiBjcml0ZXJpYSBlbXBsb3llZCBpbiB0aGUgb3JpZ2luYWwgcHVibGljYXRpb24gb2YgU3R1ZHkgMSAoV2Vpc21hbiBldCBhbC4sIDIwMTcpLiBJbXBvcnRhbnRseSwgdGhpcyBpcyB0aGUgbnVtYmVyIG9mIGZhY3RvcnMgcmV0YWluZWQgYW1vbmcgVVMgYWR1bHRzIGluIGFsbCBvZiBteSBwcmV2aW91cyBzdHVkaWVzIHdpdGggVVMgYWR1bHRzIChTdHVkaWVzIDFhLTFkKS4KCkFmdGVyIHJvdGF0aW9uLCB0aGUgZmlyc3QgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gdGhlIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHRoYXQgSSBsYWJlbGVkIEhFQVJUIGluIFN0dWR5IDEgKHNlZSBhbHNvIFdlaXNtYW4gZXQgYWwuLCAyMDE3KS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDJfYWQsIDQsICJGMSIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDJfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjEiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbiwgYW5kIGByIHJvdW5kKGVmYV93ZG1fZDJfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBWYXIiLCAiRjEiXSwgMikgKiAxMDBgJSBvZiB0aGUgdG90YWwgdmFyaWFuY2UgaW4gcGFydGljaXBhbnRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLgoKVGhlIHNlY29uZCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byB0aGUgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIHRoYXQgSSBsYWJlbGVkIEJPRFkgaW4gU3R1ZHkgMSAoc2VlIGFsc28gV2Vpc21hbiBldCBhbC4sIDIwMTcpLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kMl9hZCwgNCwgIkYyIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kMl9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMiJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLCBhbmQgYHIgcm91bmQoZWZhX3dkbV9kMl9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIFZhciIsICJGMiJdLCAyKSAqIDEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuCgpUaGUgdGhpcmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gdGhlIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyB0aGF0IEkgcmVmZXJyZWQgdG8gYXMgTUlORCBpbiBTdHVkeSAxIChzZWUgYWxzbyBXZWlzbWFuIGV0IGFsLiwgMjAxNykuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QyX2FkLCA0LCAiRjMiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfd2RtX2QyX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYzIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24sIGFuZCBgciByb3VuZChlZmFfd2RtX2QyX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgIkYzIl0sIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4gCgpUb2dldGhlciwgdGhlc2UgdGhyZWUgZmFjdG9ycyBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKHN1bShlZmFfd2RtX2QyX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgXSksIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4KClNlZSBGaWd1cmUgMy4yIGZvciBhbGwgZmFjdG9yIGxvYWRpbmdzLgoKIyMjIyMgRm91ci1mYWN0b3Igc29sdXRpb24KCmBgYHtyfQpmYWN0b3JfbmFtZXNfZWZhX3Bhcl9kMl9hZCA8LSBjKCJCT0RZIiwgIkhFQVJUIiwgIk1JTkQgKGNvZ25pdGlvbi9hZ2VuY3kpIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1JTkQgKHBlcmNlcHRpb24pIikKYGBgCgpJbiB0aGUgZm91ci1mYWN0b3Igc29sdXRpb24gc3VnZ2VzdGVkIGJ5IHBhcmFsbGVsIGFuYWx5c2lzLCBhZnRlciByb3RhdGlvbiwgdGhlIGZpcnN0IGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyAoQk9EWSkuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfcGFyX2QyX2FkLCA0LCAiRjEiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfcGFyX2QyX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYxIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCBmb3VyLWZhY3RvciBzb2x1dGlvbiwgYW5kIGByIHJvdW5kKGVmYV9wYXJfZDJfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBWYXIiLCAiRjEiXSwgMikgKiAxMDBgJSBvZiB0aGUgdG90YWwgdmFyaWFuY2UgaW4gcGFydGljaXBhbnRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLgoKVGhlIHNlY29uZCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byB0aGUgc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgKEhFQVJUKS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV9wYXJfZDJfYWQsIDQsICJGMiIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV9wYXJfZDJfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjIiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIGZvdXItZmFjdG9yIHNvbHV0aW9uLCBhbmQgYHIgcm91bmQoZWZhX3Bhcl9kMl9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIFZhciIsICJGMiJdLCAyKSAqIDEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuCgpUaGUgdGhpcmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gdGhlIG1vcmUgImNvZ25pdGl2ZSIgYW5kICJhZ2VudGljIiBvZiB0aGUgcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIHRoYXQgSSBoYXZlIGJlZW4gcmVmZXJyaW5nIHRvIGFzIE1JTkQuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfcGFyX2QyX2FkLCA0LCAiRjMiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfcGFyX2QyX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYzIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCBmb3VyLWZhY3RvciBzb2x1dGlvbiwgYW5kIGByIHJvdW5kKGVmYV9wYXJfZDJfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBWYXIiLCAiRjMiXSwgMikgKiAxMDBgJSBvZiB0aGUgdG90YWwgdmFyaWFuY2UgaW4gcGFydGljaXBhbnRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLiAKClRoZSBmb3VydGggZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gdGhlIG1vcmUgInBlcmNlcHR1YWwiIG9mIHRoZSBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBhYmlsaXRpZXMgdGhhdCBJIGhhdmUgYmVlbiByZWZlcnJpbmcgdG8gYXMgTUlORC4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV9wYXJfZDJfYWQsIDQsICJGNCIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV9wYXJfZDJfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjQiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIGZvdXItZmFjdG9yIHNvbHV0aW9uLCBhbmQgYHIgcm91bmQoZWZhX3Bhcl9kMl9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIFZhciIsICJGNCJdLCAyKSAqIDEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuIAoKVG9nZXRoZXIsIHRoZXNlIGZvdXIgZmFjdG9ycyBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKHN1bShlZmFfcGFyX2QyX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgXSksIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4KClNlZSBGaWd1cmUgMy4yIGZvciBhbGwgZmFjdG9yIGxvYWRpbmdzLgoKIyMjIyMgSW50ZXJpbSBkaXNjdXNzaW9uCgpUd28gb2YgdGhlIHRocmVlIGZhY3RvciByZXRlbnRpb24gcHJvdG9jb2xzIHN1Z2dlc3RlZCBhIHRocmVlLWZhY3RvciBzb2x1dGlvbiwgd2hpY2ggd2FzIGNoYXJhY3Rlcml6ZWQgYnkgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIEJPRFksIEhFQVJULCBhbmQgTUlORC4gVGhpcyB0aHJlZS1mYWN0b3Igc3RydWN0dXJlIGlzIGhpZ2hseSBzaW1pbGFyIHRvIHRoZSB0aHJlZS1mYWN0b3Igc3RydWN0dXJlcyByZXZlYWxlZCBieSBTdHVkaWVzIDFhLTFkLCBzdWdnZXN0aW5nIHRoYXQgdGhlIGNoaWxkLWZyaWVuZGx5IHBhcmFkaWdtIGRldmVsb3BlZCBmb3IgU3R1ZHkgMiB3YXMgdmFsaWQ6IFByb3ZpZGluZyBhZHVsdCBwYXJ0aWNpcGFudHMgd2l0aCBtb3JlICJjaGlsZC1mcmllbmRseSIgaXRlbXMgdG8gYXNzZXNzIHVzaW5nIGEgdGhyZWUtcG9pbnQgKHJhdGhlciB0aGFuIHNldmVuLXBvaW50KSByZXNwb25zZSBzY2FsZSBlbGljaXRlZCB0aGUgc2FtZSBjb25jZXB0dWFsIHVuaXRzIHRoYXQgaGF2ZSBiZWVuIHJldmVhbGVkIGJ5IG1vcmUgY29tcGxleCwgImFkdWx0LWZyaWVuZGx5IiBleHBlcmltZW50YWwgcGFyYWRpZ21zLiAKCk1lYW53aGlsZSwgSSB3b3VsZCBzdW1tYXJpemUgdGhlIGZvdXItZmFjdG9yIHNvbHV0aW9uIHN1Z2dlc3RlZCBieSBwYXJhbGxlbCBhbmFseXNpcyBhcyBhIHNsaWdodCB2YXJpYW50IG9uIHRoaXMgdGhyZWUtZmFjdG9yIHNvbHV0aW9u4oCUYWdhaW4gY2hhcmFjdGVyaXplZCBieSBkaXN0aW5jdCBjb25zdHJ1Y3RzIG9mIEJPRFkgYW5kIEhFQVJUIGJ1dCBpbmNsdWRpbmcgYSBmdXJ0aGVyIGRpZmZlcmVudGlhdGlvbiBvZiB0aGUgc3VpdGUgb2YgbWVudGFsIGNhcGFjaXRpZXMgSSBoYXZlIHJlZmVycmVkIHRvIGFzIE1JTkQgaW50byBjb2duaXRpdmUvYWdlbnRpYyBhYmlsaXRpZXMgKGUuZy4sIHRoaW5raW5nLCBjaG9vc2luZywgcmVhc29uaW5nLCBwbGFubmluZykgdnMuIHBlcmNlcHR1YWwgYWJpbGl0aWVzIChlLmcuLCBoZWFyaW5nLCBzZWVpbmcsIHNlbnNpbmcpLiBSZWFuYWx5emluZyBTdHVkaWVzIDFhLTFkIHVzaW5nIGRpZmZlcmVudCBFRkEgcGFyYW1ldGVycyAoaW4gcGFydGljdWxhciwgcmV0YWluaW5nIG1vcmUgZmFjdG9ycyBhbmQgZXhhbWluaW5nIGFuIG9ibGlxdWUgdHJhbnNmb3JtYXRpb24gb2YgRUZBIHNvbHV0aW9ucyByYXRoZXIgdGhhbiBhbiBvcnRob2dvbmFsIHJvdGF0aW9uKSBwcm92aWRlcyBzb21lIGNvbnZlcmdpbmcgZXZpZGVuY2UgZm9yIHRoaXMgY29nbml0aXZlL2FnZW50aWMgdnMuIHBlcmNlcHRpb24gZGlzdGluY3Rpb24gaW4gdGhlIGNvcnJlbGF0aW9uIHN0cnVjdHVyZSBvZiBVUyBhZHVsdHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnM7IHNlZSBBcHBlbmRpeCBBLiBIb3dldmVyLCB0aGlzIGRpc3RpbmN0aW9uIGRvZXMgbm90IGFwcGVhciB0byBiZSByb2J1c3QgZW5vdWdoIHRvIGVtZXJnZSByZWxpYWJseSBhY3Jvc3Mgc3R1ZGllcyBhbmQgYW5hbHlzaXMgZGVjaXNpb25zIGluIHRoZSBraW5kcyBvZiBleHBlcmltZW50YWwgcGFyYWRpZ21zIGVtcGxveWVkIGluIHRoaXMgZGlzc2VydGF0aW9uLgoKIyMjIENoaWxkcmVuICg3LTl5KQoKIyMjIyBIb3cgbWFueSBjb25jZXB0dWFsIHVuaXRzPwoKYGBge3J9CnJldGVuX3JlcG9ydFsiU3R1ZHkgMjogQ2hpbGRyZW4iLF0KYGBgCgpgYGB7cn0KZWZhX3Bhcl9kMl83OSA8LSBmYV9mdW4oZDJfNzlfd2lkZV9pLCByZXRlbl9yZXBvcnRbIlN0dWR5IDI6IENoaWxkcmVuIiwgInBhciJdKQplZmFfYmljX2QyXzc5IDwtIGZhX2Z1bihkMl83OV93aWRlX2ksIHJldGVuX3JlcG9ydFsiU3R1ZHkgMjogQ2hpbGRyZW4iLCAiYmljIl0pCmVmYV93ZG1fZDJfNzkgPC0gZmFfZnVuKGQyXzc5X3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSAyOiBDaGlsZHJlbiIsICJ3ZG0iXSkKCnNhdmVSRFMoZWZhX3Bhcl9kMl83OSwgZmlsZSA9ICIuL2VmYXMvZWZhX3Bhcl9kMl83OSIpCnNhdmVSRFMoZWZhX2JpY19kMl83OSwgZmlsZSA9ICIuL2VmYXMvZWZhX2JpY19kMl83OSIpCnNhdmVSRFMoZWZhX3dkbV9kMl83OSwgZmlsZSA9ICIuL2VmYXMvZWZhX3dkbV9kMl83OSIpCgojIGVmYV9wYXJfZDJfNzkgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfcGFyX2QyXzc5IikKIyBlZmFfYmljX2QyXzc5IDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX2JpY19kMl83OSIpCiMgZWZhX3dkbV9kMl83OSA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV93ZG1fZDJfNzkiKQpgYGAKCkFsbCB0aHJlZSBwcm90b2NvbHMgZm9yIGRldGVybWluaW5nIGhvdyBtYW55IGZhY3RvcnMgdG8gcmV0YWluIHN1Z2dlc3RlZCByZXRhaW5pbmcgdGhyZWUgZmFjdG9yczsgc2VlIFRhYmxlIDMuMS4KCiMjIyMgV2hhdCBhcmUgdGhlc2UgY29uY2VwdHVhbCB1bml0cz8KCmBgYHtyfQpjb25nX2VmYV93ZG1fZDJfYWRfNzkgPC0gY29uZ190YWJsZV9mdW4oZWZhX2FkID0gZWZhX3dkbV9kMl9hZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfY2ggPSBlZmFfd2RtX2QyXzc5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QyX2FkKQpjb25nX2VmYV93ZG1fZDJfYWRfNzkKYGBgCgpgYGB7cn0KZmFjdG9yX25hbWVzX2VmYV93ZG1fZDJfNzkgPC0gYygiSEVBUlQiLCAiQk9EWSIsICJNSU5EIikKYGBgCgpBZnRlciByb3RhdGlvbiwgdGhlIGZpcnN0IGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzLiBBbiBhbmFseXNpcyBvZiBmYWN0b3IgY29uZ3J1ZW5jZSB3aXRoIHRoZSB0aHJlZS1mYWN0b3Igc29sdXRpb24gYW1vbmcgYWR1bHRzIGNvbmZpcm1lZCB0aGF0IHRoaXMgZmFjdG9yIHdhcyBtb3N0IHNpbWlsYXIgdG8gYWR1bHRzJyBIRUFSVCBmYWN0b3IgKGByIGNvbmdfcmVwb3J0X2Z1bihlZmFfYWQgPSBlZmFfd2RtX2QyX2FkLCBlZmFfY2ggPSBlZmFfd2RtX2QyXzc5LCBmYWN0b3IgPSAiRjEiLCBmYWN0b3JfbmFtZXNfYWQgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMl9hZClgKS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDJfNzksIDQsICJGMSIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDJfNzkkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjEiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbiwgYW5kIGByIHJvdW5kKGVmYV93ZG1fZDJfNzkkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBWYXIiLCAiRjEiXSwgMikgKiAxMDBgJSBvZiB0aGUgdG90YWwgdmFyaWFuY2UgaW4gcGFydGljaXBhbnRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLgoKVGhlIHNlY29uZCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMuIEFuIGFuYWx5c2lzIG9mIGZhY3RvciBjb25ncnVlbmNlIGNvbmZpcm1lZCB0aGF0IHRoaXMgZmFjdG9yIHdhcyBtb3N0IHNpbWlsYXIgdG8gYWR1bHRzJyBCT0RZIGZhY3RvciAoYHIgY29uZ19yZXBvcnRfZnVuKGVmYV9hZCA9IGVmYV93ZG1fZDJfYWQsIGVmYV9jaCA9IGVmYV93ZG1fZDJfNzksIGZhY3RvciA9ICJGMiIsIGZhY3Rvcl9uYW1lc19hZCA9IGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QyX2FkKWApLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kMl83OSwgNCwgIkYyIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kMl83OSRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMiJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLCBhbmQgYHIgcm91bmQoZWZhX3dkbV9kMl83OSRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIFZhciIsICJGMiJdLCAyKSAqIDEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuCgpUaGUgdGhpcmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzLiBBbiBhbmFseXNpcyBvZiBmYWN0b3IgY29uZ3J1ZW5jZSBjb25maXJtZWQgdGhhdCB0aGlzIGZhY3RvciB3YXMgbW9zdCBzaW1pbGFyIHRvIGFkdWx0cycgTUlORCBmYWN0b3IgKGByIGNvbmdfcmVwb3J0X2Z1bihlZmFfYWQgPSBlZmFfd2RtX2QyX2FkLCBlZmFfY2ggPSBlZmFfd2RtX2QyXzc5LCBmYWN0b3IgPSAiRjMiLCBmYWN0b3JfbmFtZXNfYWQgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMl9hZClgKS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDJfNzksIDQsICJGMyIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDJfNzkkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjMiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbiwgYW5kIGByIHJvdW5kKGVmYV93ZG1fZDJfNzkkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBWYXIiLCAiRjMiXSwgMikgKiAxMDBgJSBvZiB0aGUgdG90YWwgdmFyaWFuY2UgaW4gcGFydGljaXBhbnRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLgoKVG9nZXRoZXIsIHRoZXNlIHRocmVlIGZhY3RvcnMgYWNjb3VudGVkIGZvciBgciByb3VuZChzdW0oZWZhX3dkbV9kMl83OSRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIFZhciIsIF0pLCAyKSAqIDEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuCgpTZWUgRmlndXJlIDMuMiBmb3IgYWxsIGZhY3RvciBsb2FkaW5ncywgYW5kIFRhYmxlIDMuMiBmb3IgY29zaW5lIHNpbWlsYXJpdGllcyBiZXR3ZWVuIGNoaWxkIGFuZCBhZHVsdCBmYWN0b3JzLgoKSW4gc3VtLCBsaWtlIGFkdWx0cyBpbiBTdHVkeSAxLCBhbmQgbGlrZSB0aGUgdGhyZWUtZmFjdG9yIHNvbHV0aW9uIGZvciBhZHVsdHMgaW4gdGhlIGN1cnJlbnQgc3R1ZHksIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4ncyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zIHdlcmUgZG9taW5hdGVkIGJ5IGEgdGhyZWUtd2F5IGRpc3RpbmN0aW9uIGJldHdlZW4gcGh5c2lvbG9naWNhbCwgc29jaWFsLWVtb3Rpb25hbCwgYW5kIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllc+KAlGkuZS4sIEJPRFksIEhFQVJULCBhbmQgTUlORC4KCmBgYHtyfQpwbG90X2VmYV93ZG1fZDJfYWQgPC0gaGVhdG1hcF9mdW4oZWZhX3dkbV9kMl9hZCwgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDJfYWQpICsKICBsYWJzKHRpdGxlID0gIkFkdWx0cyIsIHN1YnRpdGxlID0gIjMtZmFjdG9yIHNvbHV0aW9uIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKcGxvdF9lZmFfcGFyX2QyX2FkIDwtIGhlYXRtYXBfZnVuKGVmYV9wYXJfZDJfYWQsIGZhY3Rvcl9uYW1lc19lZmFfcGFyX2QyX2FkKSArCiAgbGFicyh0aXRsZSA9ICJBZHVsdHMiLCBzdWJ0aXRsZSA9ICI0LWZhY3RvciBzb2x1dGlvbiIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCnBsb3RfZWZhX3dkbV9kMl83OSA8LSBoZWF0bWFwX2Z1bihlZmFfd2RtX2QyXzc5LCBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMl83OSkgKwogIGxhYnModGl0bGUgPSAiQ2hpbGRyZW4sIDctOXkiLCBzdWJ0aXRsZSA9ICIzLWZhY3RvciBzb2x1dGlvbiIpCmBgYAoKYGBge3J9CmZpZ3VyZTMuMiA8LSBwbG90X2dyaWQocGxvdF9lZmFfd2RtX2QyX2FkLCBwbG90X2VmYV9wYXJfZDJfYWQsCiAgICAgICAgICAgICAgICAgICAgICAgcGxvdF9lZmFfd2RtX2QyXzc5LAogICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9ICJBVVRPIiwgbmNvbCA9IDMsIHJlbF93aWR0aHMgPSBjKDEsIDEuNSwgMS4yKSkKCmZpZ3VyZTMuMl9jYXAgPC0gYWRkX3N1YihmaWd1cmUzLjIsIHN0cl93cmFwKCJGaWd1cmUgMy4yOiBGYWN0b3IgbG9hZGluZ3MgZnJvbSBleHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzZXMgb2YgU3R1ZHkgMiwgaW4gd2hpY2ggcGFydGljaXBhbnRzIGFzc2Vzc2VkIG9uZSBvZiB0d28gJ2VkZ2UgY2FzZScgY2hhcmFjdGVycyAoYSBiZWV0bGUgb3IgYSByb2JvdCkuIChBKSBSZXN1bHRzIGZvciBVUyBhZHVsdHMsIHJldGFpbmluZyAzIGZhY3RvcnMgKGFzIHN1Z2dlc3RlZCBieSBtaW5pbWl6aW5nIEJJQyBhbmQgYnkgdGhlIG9yaWdpbmFsIGZhY3RvciByZXRlbnRpb24gY3JpdGVyaWEgcmVwb3J0ZWQgaW4gV2Vpc21hbiBldCBhbC4sIDIwMTcpLiAoQikgUmVzdWx0cyBmb3IgVVMgYWR1bHRzLCByZXRhaW5pbmcgNCBmYWN0b3JzIChhcyBzdWdnZXN0ZWQgYnkgcGFyYWxsZWwgYW5hbHlzaXMpLiAoQykgUmVzdWx0cyBmb3IgVVMgY2hpbGRyZW4gYWdlcyA3LTl5LiBJbiB0aGlzIGFuZCBhbGwgZmlndXJlcyBwb3J0cmF5aW5nIGZhY3RvciBsb2FkaW5ncywgZmFjdG9ycyBoYXZlIGJlZW4gcGxvdHRlZCBpbiB0aGUgc2FtZSBvcmRlciAoQk9EWSwgSEVBUlQsIE1JTkQpLCB3aGVuIGFwcGxpY2FibGUsIHRvIGZhY2lsaXRhdGUgY29tcGFyaXNvbiBhY3Jvc3Mgc3R1ZGllcy4gQSBmYWN0b3IgbG9hZGluZyBvZiArMSBpbmRpY2F0ZXMgYSBwZXJmZWN0bHkgcG9zaXRpdmUgcmVsYXRpb25zaGlwIGJldHdlZW4gbWVudGFsIGNhcGFjaXR5IGFuZCB1bmRlcmx5aW5nIGNvbnN0cnVjdDsgYSBsb2FkaW5nIG9mIC0xIGluZGljYXRlcyBhIHBlcmZlY3RseSBuZWdhdGl2ZSByZWxhdGlvbnNoaXAuIiwgMjEwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciBmaWd1cmUzLjIsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA5LCBmaWcuYXNwID0gMC42fQpnZ2RyYXcoZmlndXJlMy4yX2NhcCkKYGBgCgojIyBEaXNjdXNzaW9uCgpFeHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzZXMgc3VnZ2VzdGVkIHRoYXQgYnkgbWlkZGxlIGNoaWxkaG9vZCAoNy05eSksIHRoZSBjb25jZXB0dWFsIHN0cnVjdHVyZSB1bmRlcmx5aW5nIFVTIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIG1lbnRhbCBsaWZlIGlzIHZlcnkgc2ltaWxhciB0byB0aGF0IG9mIFVTIGFkdWx0cywgYW5jaG9yZWQgYnkgc3VpdGVzIG9mIG1lbnRhbCBjYXBhY2l0aWVzIHJlbGF0ZWQgdG8gQk9EWSAocGh5c2lvbG9naWNhbCBzZW5zYXRpb25zKSwgSEVBUlQgKHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzKSwgYW5kIE1JTkQgKHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcykuIEluIHByaW5jaXBsZSwgYSBudW1iZXIgb2YgYWRkaXRpb25hbCBvciBhbHRlcm5hdGl2ZSBsYXRlbnQgZmFjdG9ycyBjb3VsZCBoYXZlIGVtZXJnZWQgZnJvbSB0aGUgZmFjdG9yIGFuYWx5c2lzIG9mIGNoaWxkcmVuJ3MgcmVzcG9uc2VzLiBGb3IgZXhhbXBsZSwgY2hpbGRyZW4gbWlnaHQgaGF2ZSBkaXN0aW5ndWlzaGVkIHByaW1hcmlseSBiZXR3ZWVuIGludGVybmFsICJleHBlcmllbmNlIiBhbmQgZXh0ZXJuYWwgYWN0aW9uIG9yICJhZ2VuY3kiIChHcmF5IGV0IGFsLiwgMjAwNyksIG9yIHRoZXkgbWlnaHQgaGF2ZSBkZW1vbnN0cmF0ZWQgZmluZXItZ3JhaW5lZCBncm91cGluZ3Mgb2YgbWVudGFsIGNhcGFjaXRpZXMgYmFzZWQgb24gcGhyYXNpbmcsIHJvdGUga25vd2xlZGdlLCBldGMuIEluc3RlYWQsIHRoZSBsYXRlbnQgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgdW5kZXJseWluZyBjaGlsZHJlbidzIHJlc3BvbnNlcyBhcHBlYXJzIHRvIGJlIHZlcnkgc2ltaWxhciB0byB0aGF0IG9mIGFkdWx0cywgYm90aCBpbiB0aGlzIHN0dWR5IGFuZCBpbiBXZWlzbWFuIGV0IGFsLidzICgyMDE3KSBwcmV2aW91cyB3b3JrLiBJbiBvdGhlciB3b3JkcywgYW55IGRyYW1hdGljIGRldmVsb3BtZW50YWwgY2hhbmdlcyB0byB0aGlzIGNvbmNlcHR1YWwgc3RydWN0dXJlIGxpa2VseSBvY2N1ciBwcmlvciB0byB0aGUgYWdlIG9mIDd5LgoKCiMgU3R1ZHkgMzogQ29uY2VwdHVhbCBjaGFuZ2Ugb3ZlciBlYXJseSBhbmQgbWlkZGxlIGNoaWxkaG9vZCAoNC05eSkKClN0dWR5IDMgY29udGludWVzIG15IGV4cGxvcmF0aW9uIG9mIHRoZSBlbWVyZ2VuY2Ugb2YgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUgaW4gY2hpbGRob29kLiBBZ2FpbiwgaW4gdGhpcyBjaGFwdGVyLCBJIGZvY3VzIGluIHBhcnRpY3VsYXIgb24gdGhlIGZ1bmRhbWVudGFsIGNvbXBvbmVudHMgb2YgdGhpcyByZXByZXNlbnRhdGlvbjogV2hhdCBhcmUgdGhlIGNvbmNlcHR1YWwgdW5pdHMgYXZhaWxhYmxlIHRvIFVTIGNoaWxkcmVuIGF0IGRpZmZlcmVudCBwb2ludHMgaW4gZGV2ZWxvcG1lbnQsIGFuZCBob3cgbWlnaHQgdGhpcyBhc3BlY3Qgb2YgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbiBjaGFuZ2U/CgpJbiBTdHVkeSAzLCBJIGFpbWVkIHRvIGV4dGVuZCBteSBmaW5kaW5ncyB3aXRoIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gaW4gU3R1ZHkgMiBieSBleHBhbmRpbmcgdGhlIGxpc3Qgb2YgdGhlIHRhcmdldCBjaGFyYWN0ZXJzIHRvIGluY2x1ZGUgbm90IG9ubHkgdGhlIHR3byAiZWRnZSBjYXNlcyIgZnJvbSBTdHVkeSAyIChhIGJlZXRsZSBhbmQgYSByb2JvdCksIGJ1dCBhIGFsc28gYSB3aWRlciByYW5nZSBvZiBhbmltYXRlIGJlaW5ncyAoYSBiaXJkLCBhIGdvYXQsIGFuZCBhbiBlbGVwaGFudCkgYW5kIGluYW5pbWF0ZSBvYmplY3RzIChhIGNvbXB1dGVyLCBhIHRlZGR5IGJlYXIsIGFuZCBhIGRvbGwp4oCUaW4gb3RoZXIgd29yZHMsIGVtcGxveWluZyB0aGUgImRpdmVyc2UgY2hhcmFjdGVycyIgKHJhdGhlciB0aGFuICJlZGdlIGNhc2UiKSB2YXJpYW50IG9mIHRoZSBvdmVyYWxsIGFwcHJvYWNoLiBJbiBTdHVkeSAxLCB0aGVzZSB0d28gYXBwcm9hY2hlcyB5aWVsZGVkIHZlcnkgc2ltaWxhciBwaWN0dXJlcyBvZiB0aGUgY29uY2VwdHVhbCB1bml0cyBhdmFpbGFibGUgdG8gYWR1bHRzIChzZWUgYWxzbyBXZWlzbWFuIGV0IGFsLiwgMjAxNykuIEkgcmVhc29uZWQgdGhhdCBpZiB0aGlzIHRocmVlLXBhcnQgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgaXMgc3RhYmxlIGFuZCByb2J1c3QgYnkgdGhlIGFnZSBvZiA3LTl5LCBpdCBzaG91bGQgbWFuaWZlc3QgYW1vbmcgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiB1bmRlciB0aGUgc2FtZSByYW5nZSBvZiBjb25kaXRpb25zIHRoYXQgaXQgZG9lcyBhbW9uZyBhZHVsdHMuIAoKVGhpcyBzdHVkeSBhbHNvIHByb3ZpZGVzIGEgZmlyc3QgZ2xpbXBzZSBvZiB0aGUgZWFybGllciBkZXZlbG9wbWVudCBvZiBjb25jZXB0dWFsIHN0cnVjdHVyZSBpbiBhIGdyb3VwIG9mIHlvdW5nZXIgY2hpbGRyZW4uIEkgdGFyZ2V0ZWQgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiBmb3IgdGhlIHlvdW5nZXIgYWdlIGdyb3VwIGJlY2F1c2UgdGhpcyBoYXMgYmVlbiBpZGVudGlmaWVkIGFzIGEgcGVyaW9kIG9mIGRyYW1hdGljIGRldmVsb3BtZW50IGluIHNldmVyYWwgcmVsZXZhbnQgZG9tYWlucy4gTWFueSBzdHVkaWVzIGhhdmUgZG9jdW1lbnRlZCBzaGlmdHMgaW4gY2hpbGRyZW4ncyBhYmlsaXRpZXMgdG8gdGFrZSBvdGhlcnMnIHBlcnNwZWN0aXZlcywgcmVwcmVzZW50IGZhbHNlIGJlbGllZnMsIGFuZCBpbnRlZ3JhdGUgcmVwcmVzZW50YXRpb25zIG9mIGludGVudGlvbnMgYW5kIG91dGNvbWVzIGluIGV2YWx1YXRpbmcgbW9yYWwgcmVzcG9uc2liaWxpdHkgKGZvciByZXZpZXdzLCBzZWUgRmxhdmVsbCwgMTk5OTsgV2VsbG1hbiwgMjAxNSkuIFRoZSBwcmVzY2hvb2wgeWVhcnMgaGF2ZSBhbHNvIGJlZW4gdGhlIGZvY3VzIG9mIGEgcmljaCB0cmFkaXRpb24gb2Ygd29yayBvbiBsYXkgYmlvbG9neSBhbmQgdGhlIGFuaW1hdGUtaW5hbmltYXRlIGRpc3RpbmN0aW9uIGV4dGVuZGluZyBiYWNrIG5lYXJseSBhIGNlbnR1cnkgKGUuZy4sIENhcmV5LCAxOTg1OyBSLiBHZWxtYW4sIFNwZWxrZSwgJiBNZWNrLCAxOTgzOyBNZWRpbiwgV2F4bWFuLCBXb29kcmluZywgJiBXYXNoaW5hd2F0b2ssIDIwMTA7IFBpYWdldCwgMTkyOTsgZm9yIGEgcmV2aWV3LCBzZWUgUy4gR2VsbWFuICYgT3BmZXIsIDIwMDIpLiBBbGwgb2YgdGhlc2UgYWNjb3VudHMgbWFrZSB0aGUgY2FzZSB0aGF0IGJlY29taW5nIGEgc29waGlzdGljYXRlZCByZWFzb25lcuKAlGFuZCBwYXJ0aWN1bGFybHkgYSBzb3BoaXN0aWNhdGVkIHNvY2lhbCByZWFzb25lcuKAlHJlcXVpcmVzIHN1YnN0YW50aWFsIHJlZmluZW1lbnQgb2Ygb25lJ3MgcmVwcmVzZW50YXRpb25zIG9mIG90aGVycycgZXhwZXJpZW5jZXMsIGJlbGllZnMsIGRlc2lyZXMsIGFuZCBuZWVkcy4gTWlnaHQgdGhlc2UgcmVmaW5lbWVudHMgaW5jbHVkZSBjaGFuZ2VzIHRvIHRoZSBzdHJ1Y3R1cmUgb2YgY2hpbGRyZW4ncyBjb25jZXB0cyBvZiBtZW50YWwgbGlmZeKAlGluIHBhcnRpY3VsYXIsIHRoZSBjb25jZXB0dWFsIHVuaXRzIGF2YWlsYWJsZSB0byBjaGlsZHJlbiB3aGVuIHJlYXNvbmluZyBhYm91dCBvdGhlciBiZWluZ3M/IAoKUGFydGljaXBhbnRzIGluIFN0dWR5IDMgZWFjaCBhc3Nlc3NlZCBhIHNpbmdsZSB0YXJnZXQgY2hhcmFjdGVyIG9uIDIwIG1lbnRhbCBjYXBhY2l0aWVzLiBQYXJ0aWNpcGFudHMgd2VyZSByYW5kb21seSBvciBwc2V1ZG8tcmFuZG9tbHkgYXNzaWduZWQgdG8gYXNzZXNzIGVpdGhlciBvbmUgb2YgdGhlIGZvbGxvd2luZyA5IGNoYXJhY3RlcnM6IGFuIGVsZXBoYW50LCBhIGdvYXQsIGEgbW91c2UsIGEgYmlyZCwgYSBiZWV0bGUsIGEgdGVkZHkgYmVhciwgYSBkb2xsLCBhIHJvYm90LCBvciBhIGNvbXB1dGVyLiBUbyBtYWtlIHRoZSBzdHVkeSBhcHByb3ByaWF0ZSBmb3IgY2hpbGRyZW4gYXMgeW91bmcgYXMgNHkgb2YgYWdlLCBwYXJ0aWNpcGFudHMgYXNzZXNzZWQgYSBzdWJzZXQgb2YgdGhlIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGVtcGxveWVkIGluIFN0dWR5IDIsIGNob3NlbiB0byByZXByZXNlbnQgdGhlIHRocmVlICJjb25jZXB0dWFsIHVuaXRzIiByZXZlYWxlZCBieSBTdHVkaWVzIDEgYW5kIDIgKEJPRFksIEhFQVJULCBhbmQgTUlORCkgYW5kIHRvIGNvdmVyIGEgc2ltaWxhciByYW5nZSBvZiBtZW50YWwgY2FwYWNpdGllcyBhcyBTdHVkaWVzIDEgYW5kIDIuIEFzIGluIFN0dWR5IDIsIHBhcnRpY2lwYW50cyByZXNwb25kZWQgb24gYSB0aHJlZS1wb2ludCBzY2FsZSAoIm5vLCIgY29kZWQgYXMgMDsgImtpbmRhLCIgY29kZWQgYXMgMC41LCAieWVzLCIgY29kZWQgYXMgMSkuIAoKVG8gdmFsaWRhdGUgdGhlIG1vZGlmaWVkIHBhcmFkaWdtIChpLmUuLCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIHBhcmFkaWdtIHByb2R1Y2VkIHNpbWlsYXIgcmVzdWx0cyB0byBTdHVkaWVzIDEgYW5kIDIpLCBhbmQgdG8gcHJvdmlkZSBhIGRpcmVjdCBjb21wYXJpc29uIGZvciBjaGlsZCBwYXJ0aWNpcGFudHMsIHBhcnRpY2lwYW50cyBpbmNsdWRlZCBhIHNhbXBsZSBvZiBgciBucm93KGQzX2FkX3dpZGUpYCBVUyBhZHVsdHMsIGFzIHdlbGwgYXMgYSBzYW1wbGUgb2YgYHIgbnJvdyhkM183OV93aWRlKWAgIm9sZGVyIiBjaGlsZHJlbiAoYHIgc3VtbWFyeShkM183OSRhZ2UpWyJNaW4uIl0gJT4lIHJvdW5kKDIpYC1gciBzdW1tYXJ5KGQzXzc5JGFnZSlbIk1heC4iXSAlPiUgcm91bmQoMilgeTsgbWVkaWFuOiBgciBzdW1tYXJ5KGQzXzc5JGFnZSlbIk1lZGlhbiJdICU+JSByb3VuZCgyKWB5KSwgYW5kIGEgc2FtcGxlIG9mIGByIG5yb3coZDNfNDZfd2lkZSlgICJ5b3VuZ2VyIiBjaGlsZHJlbiAoYHIgc3VtbWFyeShkM180NiRhZ2UpWyJNaW4uIl0gJT4lIHJvdW5kKDIpYC1gciBzdW1tYXJ5KGQzXzQ2JGFnZSlbIk1heC4iXSAlPiUgcm91bmQoMilgeTsgbWVkaWFuOiBgciBzdW1tYXJ5KGQzXzQ2JGFnZSlbIk1lZGlhbiJdICU+JSByb3VuZCgyKWB5KS4gKFNlZSBDaGFwdGVyIElJIGZvciBkZXRhaWxlZCBtZXRob2RzLikKCiMjIFJlc3VsdHMKCiMjIyBBZHVsdHMKCiMjIyMgSG93IG1hbnkgY29uY2VwdHVhbCB1bml0cz8KCmBgYHtyfQpyZXRlbl9yZXBvcnRbIlN0dWR5IDM6IEFkdWx0cyIsXQpgYGAKCmBgYHtyfQplZmFfcGFyX2QzX2FkIDwtIGZhX2Z1bihkM19hZF93aWRlX2ksIHJldGVuX3JlcG9ydFsiU3R1ZHkgMzogQWR1bHRzIiwgInBhciJdKQplZmFfYmljX2QzX2FkIDwtIGZhX2Z1bihkM19hZF93aWRlX2ksIHJldGVuX3JlcG9ydFsiU3R1ZHkgMzogQWR1bHRzIiwgImJpYyJdKQplZmFfd2RtX2QzX2FkIDwtIGZhX2Z1bihkM19hZF93aWRlX2ksIHJldGVuX3JlcG9ydFsiU3R1ZHkgMzogQWR1bHRzIiwgIndkbSJdKQoKc2F2ZVJEUyhlZmFfcGFyX2QzX2FkLCBmaWxlID0gIi4vZWZhcy9lZmFfcGFyX2QzX2FkIikKc2F2ZVJEUyhlZmFfYmljX2QzX2FkLCBmaWxlID0gIi4vZWZhcy9lZmFfYmljX2QzX2FkIikKc2F2ZVJEUyhlZmFfd2RtX2QzX2FkLCBmaWxlID0gIi4vZWZhcy9lZmFfd2RtX2QzX2FkIikKCiMgZWZhX3Bhcl9kM19hZCA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV9wYXJfZDNfYWQiKQojIGVmYV9iaWNfZDNfYWQgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfYmljX2QzX2FkIikKIyBlZmFfd2RtX2QzX2FkIDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX3dkbV9kM19hZCIpCmBgYAoKYGBge3J9CmVmYV9iaWNfZDNfYWQkVmFjY291bnRlZCAlPiUgZGF0YS5mcmFtZSgpICU+JSByb3VuZCgyKQpsb2FkaW5nc19jb3VudF9kb21fZnVuKGVmYV9iaWNfZDNfYWQpCmxvYWRpbmdzX3N1bW1hcml6ZV9mdW4oZWZhX2JpY19kM19hZCkgJT4lIAogIG11dGF0ZV9hdCh2YXJzKC1mYWN0b3IpLCBmdW5zKHJvdW5kKC4sIDIpKSkKYGBgCgpUd28gb2YgdGhlIHRocmVlIHByb3RvY29scyBmb3IgZGV0ZXJtaW5pbmcgaG93IG1hbnkgZmFjdG9ycyB0byByZXRhaW4gKHBhcmFsbGVsIGFuYWx5c2lzIGFuZCB0aGUgZmFjdG9yIHJldGVudGlvbiBjcml0ZXJpYSBlbXBsb3llZCBpbiB0aGUgb3JpZ2luYWwgcHVibGljYXRpb24gb2YgU3R1ZHkgMTsgV2Vpc21hbiBldCBhbC4sIDIwMTcpIHN1Z2dlc3RlZCByZXRhaW5pbmcgdGhyZWUgZmFjdG9ycywgd2hpbGUgdGhlIHRoaXJkIChtaW5pbWl6aW5nIEJJQykgc3VnZ2VzdGVkIHJldGFpbmluZyBmb3VyIGZhY3RvcnM7IHNlZSBUYWJsZSAzLjEuIAoKVGhyZWUgb2YgdGhlIGZvdXIgZmFjdG9ycyBzdWdnZXN0ZWQgYnkgbWluaW1pemluZyBCSUMgd2VyZSBxdWFsaXRhdGl2ZWx5IHZlcnkgc2ltaWxhciB0byB0aGUgdGhyZWUgZmFjdG9ycyBzdWdnZXN0ZWQgYnkgdGhlIG90aGVyIHByb3RvY29scywgYW5kIHRvZ2V0aGVyIGFjY291bnRlZCBmb3IgZnVsbHkgYHIgZWZhX2JpY19kM19hZCRWYWNjb3VudGVkWyJDdW11bGF0aXZlIFByb3BvcnRpb24iLCAiRjMiXSAlPiUgcm91bmQoMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlLiBUaGUgZm91cnRoIGZhY3RvciBhY2NvdW50ZWQgZm9yIG9ubHkgYHIgZWZhX2JpY19kM19hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGNCJdICU+JSByb3VuZCgyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UsIHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBvbmx5IG9uZSBvZiB0aGUgNDAgbWVudGFsIGNhcGFjaXRpZXMgaW5jbHVkZWQgaW4gdGhpcyBzdHVkeSAoYHIgdG9wX25fZG9tQ2FwKGVmYV9iaWNfZDNfYWQsIG4gPSAxLCAiRjQiLCBhYnNfcG9zID0gImFicyIpYCksIGFuZCBoYWQgbW9kZXJhdGVseSB3ZWFrIGZhY3RvciBsb2FkaW5ncyBmb3IgYWxsIG90aGVyIGNhcGFjaXRpZXMgKGFic29sdXRlIGxvYWRpbmdzIDxgciBlZmFfYmljX2QzX2FkICU+JSBsb2FkaW5nc19mdW4oKSAlPiUgZmlsdGVyKGNhcGFjaXR5ICE9ICJmZWVsIGhhcHB5IiwgZmFjdG9yID09ICJGNCIpICU+JSBzdW1tYXJpc2UobWF4X2FicyA9IG1heChhYnMobG9hZGluZykpKSAlPiUgYXMubnVtZXJpYygpICU+JSBjZWlsaW5nX2RlYygyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYCkuIEdpdmVuIGFsbCB0aGlzLCBJIHdpbGwgYWdhaW4gZm9jdXMgdGhlIHJlbWFpbmRlciBvZiBteSBhbmFseXNlcyBvbiB0aGUgdGhyZWUtZmFjdG9yIHNvbHV0aW9uOyBzZWUgQXBwZW5kaXggQSBmb3IgdGhlIGZvdXItZmFjdG9yIHNvbHV0aW9uLgoKIyMjIyBXaGF0IGFyZSB0aGVzZSBjb25jZXB0dWFsIHVuaXRzPwoKYGBge3J9CmZhY3Rvcl9uYW1lc19lZmFfd2RtX2QzX2FkIDwtIGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpCmBgYAoKQWZ0ZXIgcm90YXRpb24sIHRoZSBmaXJzdCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byB0aGUgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIHRoYXQgSSBsYWJlbGVkIEJPRFkgaW4gU3R1ZGllcyAxIGFuZCAyIChzZWUgYWxzbyBXZWlzbWFuIGV0IGFsLiwgMjAxNykuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QzX2FkLCA0LCAiRjEiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfd2RtX2QzX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYxIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24sIGFuZCBgciByb3VuZChlZmFfd2RtX2QzX2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgIkYxIl0sIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4KClRoZSBzZWNvbmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gdGhlIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHRoYXQgSSBsYWJlbGVkIEhFQVJUIGluIFN0dWRpZXMgMSBhbmQgMiAoc2VlIGFsc28gV2Vpc21hbiBldCBhbC4sIDIwMTcpLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kM19hZCwgNCwgIkYyIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kM19hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMiJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLCBhbmQgYHIgcm91bmQoZWZhX3dkbV9kM19hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIFZhciIsICJGMiJdLCAyKSAqIDEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuCgpUaGUgdGhpcmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gdGhlIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyB0aGF0IEkgcmVmZXJyZWQgdG8gYXMgTUlORCBpbiBTdHVkaWVzIDEgYW5kIDIgKHNlZSBhbHNvIFdlaXNtYW4gZXQgYWwuLCAyMDE3KS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDNfYWQsIDQsICJGMyIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDNfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjMiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbiwgYW5kIGByIHJvdW5kKGVmYV93ZG1fZDNfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBWYXIiLCAiRjMiXSwgMikgKiAxMDBgJSBvZiB0aGUgdG90YWwgdmFyaWFuY2UgaW4gcGFydGljaXBhbnRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLgoKVG9nZXRoZXIsIHRoZXNlIHRocmVlIGZhY3RvcnMgYWNjb3VudGVkIGZvciBgciByb3VuZChzdW0oZWZhX3dkbV9kM19hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIFZhciIsIF0pLCAyKSAqIDEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuCgpTZWUgRmlndXJlIDMuMyBmb3IgYWxsIGZhY3RvciBsb2FkaW5ncy4KCkluIHN1bSwgYXMgaW4gU3R1ZHkgMSBhbmQgdGhlIHRocmVlLWZhY3RvciBzb2x1dGlvbiBmb3IgU3R1ZHkgMiwgdGhlIGNvbmNlcHR1YWwgc3RydWN0dXJlIHJldmVhbGVkIGJ5IHRoaXMgYW5hbHlzaXMgYW1vbmcgYWR1bHRzIHdhcyBjaGFyYWN0ZXJpemVkIGJ5IGEgdGhyZWUtd2F5IGRpc3RpbmN0aW9uIGJldHdlZW4gQk9EWSwgSEVBUlQsIGFuZCBNSU5ELiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIG1vZGlmaWVkIGNoaWxkLWZyaWVuZGx5IHBhcmFkaWdtIGRldmVsb3BlZCBmb3IgU3R1ZHkgMyB3YXMgdmFsaWQ6IFVzaW5nIGEgc2hvcnRlciBsaXN0IG9mIGl0ZW1zIGFuZCBhIHdpZGVyIHJhbmdlIG9mIHRhcmdldCBjaGFyYWN0ZXJzIGVsaWNpdGVkIHRoZSBzYW1lIHRocmVlIGNvbmNlcHR1YWwgdW5pdHMsIGFtb25nIFVTIGFkdWx0cywgdGhhdCB3YXMgcmV2ZWFsZWQgaW4gU3R1ZGllcyAxIGFuZCAyLiAKCiMjIyBPbGRlciBjaGlsZHJlbiAoNy05eSkKCiMjIyMgSG93IG1hbnkgY29uY2VwdHVhbCB1bml0cz8KCmBgYHtyfQpyZXRlbl9yZXBvcnRbIlN0dWR5IDM6IE9sZGVyIGNoaWxkcmVuIixdCmBgYAoKYGBge3J9CmVmYV9wYXJfZDNfNzkgPC0gZmFfZnVuKGQzXzc5X3dpZGVfaSwgCiAgICAgICAgICAgICAgICAgICAgICAgIHJldGVuX3JlcG9ydFsiU3R1ZHkgMzogT2xkZXIgY2hpbGRyZW4iLCAicGFyIl0pCmVmYV9iaWNfZDNfNzkgPC0gZmFfZnVuKGQzXzc5X3dpZGVfaSwgCiAgICAgICAgICAgICAgICAgICAgICAgIHJldGVuX3JlcG9ydFsiU3R1ZHkgMzogT2xkZXIgY2hpbGRyZW4iLCAiYmljIl0pCmVmYV93ZG1fZDNfNzkgPC0gZmFfZnVuKGQzXzc5X3dpZGVfaSwgCiAgICAgICAgICAgICAgICAgICAgICAgIHJldGVuX3JlcG9ydFsiU3R1ZHkgMzogT2xkZXIgY2hpbGRyZW4iLCAid2RtIl0pCgpzYXZlUkRTKGVmYV9wYXJfZDNfNzksIGZpbGUgPSAiLi9lZmFzL2VmYV9wYXJfZDNfNzkiKQpzYXZlUkRTKGVmYV9iaWNfZDNfNzksIGZpbGUgPSAiLi9lZmFzL2VmYV9iaWNfZDNfNzkiKQpzYXZlUkRTKGVmYV93ZG1fZDNfNzksIGZpbGUgPSAiLi9lZmFzL2VmYV93ZG1fZDNfNzkiKQoKIyBlZmFfcGFyX2QzXzc5IDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX3Bhcl9kM183OSIpCiMgZWZhX2JpY19kM183OSA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV9iaWNfZDNfNzkiKQojIGVmYV93ZG1fZDNfNzkgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfd2RtX2QzXzc5IikKYGBgCgpBcyB3YXMgdGhlIGNhc2UgYW1vbmcgdGhpcyBhZ2UgZ3JvdXAgaW4gU3R1ZHkgMiwgYWxsIHRocmVlIGZhY3RvciByZXRlbnRpb24gcHJvdG9jb2xzIHN1Z2dlc3RlZCByZXRhaW5pbmcgdGhyZWUgZmFjdG9yczsgc2VlIFRhYmxlIDMuMS4KCiMjIyMgV2hhdCBhcmUgdGhlc2UgY29uY2VwdHVhbCB1bml0cz8KCmBgYHtyfQpjb25nX2VmYV93ZG1fZDNfYWRfNzkgPC0gY29uZ190YWJsZV9mdW4oZWZhX2FkID0gZWZhX3dkbV9kM19hZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmYV9jaCA9IGVmYV93ZG1fZDNfNzksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kM19hZCkKY29uZ19lZmFfd2RtX2QzX2FkXzc5CmBgYAoKYGBge3J9CmZhY3Rvcl9uYW1lc19lZmFfd2RtX2QzXzc5IDwtIGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpCmBgYAoKQWZ0ZXIgcm90YXRpb24sIHRoZSBmaXJzdCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMuIEFuIGFuYWx5c2lzIG9mIGZhY3RvciBjb25ncnVlbmNlIGNvbmZpcm1lZCB0aGF0IHRoaXMgZmFjdG9yIHdhcyBtb3N0IHNpbWlsYXIgdG8gYWR1bHRzJyBCT0RZIGZhY3RvciAoYHIgY29uZ19yZXBvcnRfZnVuKGVmYV9hZCA9IGVmYV93ZG1fZDNfYWQsIGVmYV9jaCA9IGVmYV93ZG1fZDNfNzksIGZhY3RvciA9ICJGMSIsIGZhY3Rvcl9uYW1lc19hZCA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpKWApLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kM183OSwgNCwgIkYxIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kM183OSRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMSJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLCBhbmQgYHIgcm91bmQoZWZhX3dkbV9kM183OSRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIFZhciIsICJGMSJdLCAyKSAqIDEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuCgpUaGUgc2Vjb25kIGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzLiBBbiBhbmFseXNpcyBvZiBmYWN0b3IgY29uZ3J1ZW5jZSBjb25maXJtZWQgdGhhdCB0aGlzIGZhY3RvciB3YXMgbW9zdCBzaW1pbGFyIHRvIGFkdWx0cycgSEVBUlQgZmFjdG9yIChgciBjb25nX3JlcG9ydF9mdW4oZWZhX2FkID0gZWZhX3dkbV9kM19hZCwgZWZhX2NoID0gZWZhX3dkbV9kM183OSwgZmFjdG9yID0gIkYyIiwgZmFjdG9yX25hbWVzX2FkID0gYygiQk9EWSIsICJIRUFSVCIsICJNSU5EIikpYCkuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QzXzc5LCA0LCAiRjIiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfd2RtX2QzXzc5JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYyIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24sIGFuZCBgciByb3VuZChlZmFfd2RtX2QzXzc5JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgIkYyIl0sIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4KClRoZSB0aGlyZCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBhYmlsaXRpZXMuIEFuIGFuYWx5c2lzIG9mIGZhY3RvciBjb25ncnVlbmNlIGNvbmZpcm1lZCB0aGF0IHRoaXMgZmFjdG9yIHdhcyBtb3N0IHNpbWlsYXIgdG8gYWR1bHRzJyBNSU5EIGZhY3RvciAoYHIgY29uZ19yZXBvcnRfZnVuKGVmYV9hZCA9IGVmYV93ZG1fZDNfYWQsIGVmYV9jaCA9IGVmYV93ZG1fZDNfNzksIGZhY3RvciA9ICJGMyIsIGZhY3Rvcl9uYW1lc19hZCA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpKWApLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kM183OSwgNCwgIkYzIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kM183OSRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMyJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLCBhbmQgYHIgcm91bmQoZWZhX3dkbV9kM183OSRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIFZhciIsICJGMyJdLCAyKSAqIDEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuCgpUb2dldGhlciwgdGhlc2UgdGhyZWUgZmFjdG9ycyBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKHN1bShlZmFfd2RtX2QzXzc5JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgXSksIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4KClNlZSBGaWd1cmUgMy4zIGZvciBhbGwgZmFjdG9yIGxvYWRpbmdzLCBhbmQgVGFibGUgMy4yIGZvciBjb3NpbmUgc2ltaWxhcml0aWVzIGJldHdlZW4gY2hpbGQgYW5kIGFkdWx0IGZhY3RvcnMuCgpJIGNvbnNpZGVyIHRoaXMgdG8gYmUgYSBjbG9zZSBjb25jZXB0dWFsIHJlcGxpY2F0aW9uIG9mIFN0dWR5IDEsIHN1Z2dlc3RpbmcgdGhhdCBieSB0aGUgYWdlIG9mIDctOXksIHRoaXMgdGhyZWUtcGFydCBjb25jZXB0dWFsIHN0cnVjdHVyZSBpcyBzdGFibGUgYW5kIHJvYnVzdCB0byBhIHJhbmdlIG9mIGV4cGVyaW1lbnRhbCBjb25kaXRpb25zLgoKIyMjIFlvdW5nZXIgY2hpbGRyZW4gKDQtNnkpCgojIyMjIEhvdyBtYW55IGNvbmNlcHR1YWwgdW5pdHM/CgpgYGB7cn0KcmV0ZW5fcmVwb3J0WyJTdHVkeSAzOiBZb3VuZ2VyIGNoaWxkcmVuIixdCmBgYAoKYGBge3J9CmVmYV9wYXJfZDNfNDYgPC0gZmFfZnVuKGQzXzQ2X3dpZGVfaSwgCiAgICAgICAgICAgICAgICAgICAgICAgIHJldGVuX3JlcG9ydFsiU3R1ZHkgMzogWW91bmdlciBjaGlsZHJlbiIsICJwYXIiXSkKZWZhX2JpY19kM180NiA8LSBmYV9mdW4oZDNfNDZfd2lkZV9pLCAKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ZW5fcmVwb3J0WyJTdHVkeSAzOiBZb3VuZ2VyIGNoaWxkcmVuIiwgImJpYyJdKQplZmFfd2RtX2QzXzQ2IDwtIGZhX2Z1bihkM180Nl93aWRlX2ksIAogICAgICAgICAgICAgICAgICAgICAgICByZXRlbl9yZXBvcnRbIlN0dWR5IDM6IFlvdW5nZXIgY2hpbGRyZW4iLCAid2RtIl0pCgpzYXZlUkRTKGVmYV9wYXJfZDNfNDYsIGZpbGUgPSAiLi9lZmFzL2VmYV9wYXJfZDNfNDYiKQpzYXZlUkRTKGVmYV9iaWNfZDNfNDYsIGZpbGUgPSAiLi9lZmFzL2VmYV9iaWNfZDNfNDYiKQpzYXZlUkRTKGVmYV93ZG1fZDNfNDYsIGZpbGUgPSAiLi9lZmFzL2VmYV93ZG1fZDNfNDYiKQoKIyBlZmFfcGFyX2QzXzQ2IDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX3Bhcl9kM180NiIpCiMgZWZhX2JpY19kM180NiA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV9iaWNfZDNfNDYiKQojIGVmYV93ZG1fZDNfNDYgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfd2RtX2QzXzQ2IikKYGBgCgpgYGB7cn0KZWZhX2JpY19kM180NiRWYWNjb3VudGVkICU+JSBkYXRhLmZyYW1lKCkgJT4lIHJvdW5kKDIpCmxvYWRpbmdzX2NvdW50X2RvbV9mdW4oZWZhX2JpY19kM180NikKbG9hZGluZ3Nfc3VtbWFyaXplX2Z1bihlZmFfYmljX2QzXzQ2KSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoLWZhY3RvciksIGZ1bnMocm91bmQoLiwgMikpKQpgYGAKCmBgYHtyfQplZmFfcGFyX2QzXzQ2JFZhY2NvdW50ZWQgJT4lIGRhdGEuZnJhbWUoKSAlPiUgcm91bmQoMikKbG9hZGluZ3NfY291bnRfZG9tX2Z1bihlZmFfcGFyX2QzXzQ2KQpsb2FkaW5nc19zdW1tYXJpemVfZnVuKGVmYV9wYXJfZDNfNDYpICU+JSAKICBtdXRhdGVfYXQodmFycygtZmFjdG9yKSwgZnVucyhyb3VuZCguLCAyKSkpCmBgYAoKYGBge3J9CmVmYV93ZG1fZDNfNDYkVmFjY291bnRlZCAlPiUgZGF0YS5mcmFtZSgpICU+JSByb3VuZCgyKQpsb2FkaW5nc19jb3VudF9kb21fZnVuKGVmYV93ZG1fZDNfNDYpCmxvYWRpbmdzX3N1bW1hcml6ZV9mdW4oZWZhX3dkbV9kM180NikgJT4lIAogIG11dGF0ZV9hdCh2YXJzKC1mYWN0b3IpLCBmdW5zKHJvdW5kKC4sIDIpKSkKYGBgCgpFYWNoIG9mIHRoZSB0aHJlZSBmYWN0b3IgcmV0ZW50aW9uIHByb3RvY29scyBzdWdnZXN0ZWQgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGZhY3RvcnMgdG8gcmV0YWluOyBzZWUgVGFibGUgMy4xLgoKTWluaW1pemluZyBCSUMgc3VnZ2VzdGVkIGEgbnVsbCBzb2x1dGlvbiBjb25zaXN0aW5nIG9mIGEgc2luZ2xlIGZhY3RvcjsgaW4gb3RoZXIgd29yZHMsIHRoaXMgcHJvdG9jb2wgaW5kaWNhdGVkIHRoYXQgdGhlIGNvcnJlbGF0aW9uIHN0cnVjdHVyZSBvZiB5b3VuZ2VyIGNoaWxkcmVuJ3MgcmVzcG9uc2VzIHByb3ZpZGVkIG5vIGV2aWRlbmNlIGZvciBkaXN0aW5jdCBsYXRlbnQgY29uc3RydWN0cy4gIAoKTWVhbndoaWxlLCBwYXJhbGxlbCBhbmFseXNpcyBzdWdnZXN0ZWQgcmV0YWluaW5nIHR3byBmYWN0b3JzLCBhbmQgdGhlIHJldGVudGlvbiBjcml0ZXJpYSBlbXBsb3llZCBpbiB0aGUgb3JpZ2luYWwgcHVibGljYXRpb24gb2YgU3R1ZHkgMTsgV2Vpc21hbiBldCBhbC4sIDIwMTcpIHN1Z2dlc3RlZCByZXRhaW5pbmcgdGhyZWUgZmFjdG9ycy4gSW4gYm90aCB0aGUgdHdvLSBhbmQgdGhyZWUtZmFjdG9yIHNvbHV0aW9ucywgZWFjaCBmYWN0b3IgYWNjb3VudGVkIGZvciBhIHN1YnN0YW50aWFsIGFtb3VudCBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlLCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc2V2ZXJhbCBtZW50YWwgY2FwYWNpdGllcywgYW5kIGhhZCBzdHJvbmcgZmFjdG9yIGxvYWRpbmdzIGZvciBzb21lIHN1YnNldCBvZiBtZW50YWwgY2FwYWNpdGllcy4KCkdpdmVuIGFsbCB0aGlzLCBJIHdpbGwgcHJlc2VudCBhbmQgaW50ZXJwcmV0IGJvdGggdHdvLSBhbmQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uczsgc2VlIEFwcGVuZGl4IEEgZm9yIHRoZSBudWxsLCBvbmUtZmFjdG9yIHNvbHV0aW9uIHN1Z2dlc3RlZCBieSBtaW5pbWl6aW5nIEJJQy4KCiMjIyMgV2hhdCBhcmUgdGhlc2UgY29uY2VwdHVhbCB1bml0cz8KCiMjIyMjIFR3by1mYWN0b3Igc29sdXRpb24KCmBgYHtyfQpjb25nX2VmYV9wYXJfZDNfYWRfNDYgPC0gY29uZ190YWJsZV9mdW4oZWZhX2FkID0gZWZhX3dkbV9kM19hZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmYV9jaCA9IGVmYV9wYXJfZDNfNDYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kM19hZCkKY29uZ19lZmFfcGFyX2QzX2FkXzQ2CmBgYAoKYGBge3J9CmZhY3Rvcl9uYW1lc19lZmFfcGFyX2QzXzQ2IDwtIGMoIkJPRFktSEVBUlQiLCAiTUlORCIpCmBgYAoKRmlyc3QsIEkgd2lsbCBleGFtaW5lIHRoZSB0d28tZmFjdG9yIHNvbHV0aW9uIHN1Z2dlc3RlZCBieSBwYXJhbGxlbCBhbmFseXNpcy4gCgpBZnRlciByb3RhdGlvbiwgdGhlIGZpcnN0IGZhY3RvciBlbmNvbXBhc3NlZCBib3RoIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyBhbmQgZW1vdGlvbnMuIEFuIGFuYWx5c2lzIG9mIGZhY3RvciBjb25ncnVlbmNlIGluZGljYXRlZCB0aGF0IHRoaXMgZmFjdG9yIHdhcyBtb3N0IHNpbWlsYXIgdG8gYWR1bHRzJyBCT0RZIGZhY3RvciwgYnV0IHdhcyBhbHNvIHF1aXRlIHNpbWlsYXIgdG8gYWR1bHRzJyBIRUFSVCBmYWN0b3IgKGByIGNvbmdfcmVwb3J0X2Z1bihlZmFfYWQgPSBlZmFfcGFyX2QzX2FkLCBlZmFfY2ggPSBlZmFfcGFyX2QzXzQ2LCBmYWN0b3IgPSAiRjEiLCBmYWN0b3JfbmFtZXNfYWQgPSBjKCJCT0RZIiwgIkhFQVJUIiwgIk1JTkQiKSlgKS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV9wYXJfZDNfNDYsIDQsICJGMSIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV9wYXJfZDNfNDYkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjEiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHR3by1mYWN0b3Igc29sdXRpb24sIGFuZCBgciByb3VuZChlZmFfcGFyX2QzXzQ2JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgIkYxIl0sIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4KClRoZSBzZWNvbmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzLCBhcyB3ZWxsIGFzIG9uZSBjb21wbGV4IG5lZ2F0aXZlIGVtb3Rpb24gKF9mZWVsIGd1aWx0eV8pLiBBbiBhbmFseXNpcyBvZiBmYWN0b3IgY29uZ3J1ZW5jZSBjb25maXJtZWQgdGhhdCB0aGlzIGZhY3RvciB3YXMgbW9zdCBzaW1pbGFyIHRvIGFkdWx0cycgTUlORCBmYWN0b3IgKGByIGNvbmdfcmVwb3J0X2Z1bihlZmFfYWQgPSBlZmFfcGFyX2QzX2FkLCBlZmFfY2ggPSBlZmFfcGFyX2QzXzQ2LCBmYWN0b3IgPSAiRjIiLCBmYWN0b3JfbmFtZXNfYWQgPSBjKCJCT0RZIiwgIkhFQVJUIiwgIk1JTkQiKSlgKS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV9wYXJfZDNfNDYsIDQsICJGMiIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV9wYXJfZDNfNDYkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjIiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHR3by1mYWN0b3Igc29sdXRpb24sIGFuZCBgciByb3VuZChlZmFfcGFyX2QzXzQ2JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgIkYyIl0sIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4KClRvZ2V0aGVyLCB0aGVzZSB0d28gZmFjdG9ycyBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKHN1bShlZmFfcGFyX2QzXzQ2JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgXSksIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4KClNlZSBGaWd1cmUgMy4zIGZvciBhbGwgZmFjdG9yIGxvYWRpbmdzLCBhbmQgVGFibGUgMy4yIGZvciBjb3NpbmUgc2ltaWxhcml0aWVzIGJldHdlZW4gY2hpbGQgYW5kIGFkdWx0IGZhY3RvcnMuCgpJbiByZWxhdGlvbiB0byB0aGUgQk9EWS1IRUFSVC1NSU5EIHN0cnVjdHVyZSBmb3VuZCBhbW9uZyBvbGRlciBjaGlsZHJlbiBhbmQgYWR1bHRzLCBJIHdvdWxkIGRlc2NyaWJlIHRoaXMgdHdvLWZhY3RvciBzdHJ1Y3R1cmUgYXMgYmVpbmcgYW5jaG9yZWQgYnkgYSBjb250cmFzdCBiZXR3ZWVuIHRoZSBtb3JlIGFic3RyYWN0LCBjb2duaXRpdmUgY2FwYWNpdGllcyBvZiB0aGUgTUlORCB2cy4gYSBzZXQgb2Ygd2FybWVyLCBtb3JlIHZpc2NlcmFsIGV4cGVyaWVuY2VzIHRoYXQgY29uc3RpdHV0ZSBhIG1vcmUgaW50ZWdyYXRlZCByZXByZXNlbnRhdGlvbiBvZiBCT0RZLUhFQVJULgoKIyMjIyMgVGhyZWUtZmFjdG9yIHNvbHV0aW9uCgpgYGB7cn0KY29uZ19lZmFfd2RtX2QzX2FkXzQ2IDwtIGNvbmdfdGFibGVfZnVuKGVmYV9hZCA9IGVmYV93ZG1fZDNfYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfY2ggPSBlZmFfd2RtX2QzXzQ2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfYWQpCmNvbmdfZWZhX3dkbV9kM19hZF80NgpgYGAKCmBgYHtyfQpmYWN0b3JfbmFtZXNfZWZhX3dkbV9kM180NiA8LSBjKCJCT0RZKiIsICJNSU5EIiwgIkhFQVJUKiIpCmBgYAoKSSB3aWxsIG5vdyB0dXJuIHRvIHRoZSB0aHJlZS1mYWN0b3Igc29sdXRpb24gc3VnZ2VzdGVkIGJ5IHRoZSBmYWN0b3IgcmV0ZW50aW9uIGNyaXRlcmlhIGVtcGxveWVkIGluIHRoZSBvcmlnaW5hbCBwdWJsaWNhdGlvbiBvZiBTdHVkeSAxIChXZWlzbWFuIGV0IGFsLiwgMjAxNykuIEltcG9ydGFudGx5LCB0aGlzIGlzIGFsc28gdGhlIG51bWJlciBvZiBmYWN0b3JzIHJldGFpbmVkIGFtb25nIFVTIGFkdWx0cyBhbmQgb2xkZXIgY2hpbGRyZW4gaW4gdGhpcyBzdHVkeS4KCkFmdGVyIHJvdGF0aW9uLCB0aGUgZmlyc3QgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zLCBhcyB3ZWxsIGFzIHNvbWUgcG9zaXRpdmUgZW1vdGlvbnMuIEFuIGFuYWx5c2lzIG9mIGZhY3RvciBjb25ncnVlbmNlIGluZGljYXRlZCB0aGF0IHRoaXMgZmFjdG9yIHdhcyBtb3N0IHNpbWlsYXIgdG8gYWR1bHRzJyBCT0RZIGZhY3RvciwgYnV0IHdhcyBhbHNvIHF1aXRlIHNpbWlsYXIgdG8gYWR1bHRzJyBIRUFSVCBmYWN0b3IgKGByIGNvbmdfcmVwb3J0X2Z1bihlZmFfYWQgPSBlZmFfd2RtX2QzX2FkLCBlZmFfY2ggPSBlZmFfd2RtX2QzXzQ2LCBmYWN0b3IgPSAiRjEiLCBmYWN0b3JfbmFtZXNfYWQgPSBjKCJCT0RZIiwgIkhFQVJUIiwgIk1JTkQiKSlgKS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDNfNDYsIDQsICJGMSIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDNfNDYkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjEiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbiwgYW5kIGByIHJvdW5kKGVmYV93ZG1fZDNfNDYkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBWYXIiLCAiRjEiXSwgMikgKiAxMDBgJSBvZiB0aGUgdG90YWwgdmFyaWFuY2UgaW4gcGFydGljaXBhbnRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLgoKVGhlIHNlY29uZCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBhYmlsaXRpZXMsIGFzIHdlbGwgYXMgb25lIGNvbXBsZXggbmVnYXRpdmUgZW1vdGlvbiAoX2ZlZWwgZ3VpbHR5XykuIEFuIGFuYWx5c2lzIG9mIGZhY3RvciBjb25ncnVlbmNlIGNvbmZpcm1lZCB0aGF0IHRoaXMgZmFjdG9yIHdhcyBtb3N0IHNpbWlsYXIgdG8gYWR1bHRzJyBNSU5EIGZhY3RvciAoYHIgY29uZ19yZXBvcnRfZnVuKGVmYV9hZCA9IGVmYV93ZG1fZDNfYWQsIGVmYV9jaCA9IGVmYV93ZG1fZDNfNDYsIGZhY3RvciA9ICJGMiIsIGZhY3Rvcl9uYW1lc19hZCA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpKWApLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kM180NiwgNCwgIkYyIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kM180NiRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMiJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLCBhbmQgYHIgcm91bmQoZWZhX3dkbV9kM180NiRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIFZhciIsICJGMiJdLCAyKSAqIDEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuCgpUaGUgdGhpcmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMsIHdpdGggcGFydGljdWxhcmx5IHN0cm9uZyBsb2FkaW5ncyBmb3IgcG9zaXRpdmUgZW1vdGlvbnMuIEFuIGFuYWx5c2lzIG9mIGZhY3RvciBjb25ncnVlbmNlIGluZGljYXRlZCB0aGF0IHRoaXMgZmFjdG9yIHdhcyBtb3N0IHNpbWlsYXIgdG8gYWR1bHRzJyBIRUFSVCBmYWN0b3IsIGJ1dCBhbHNvIHF1aXRlIHNpbWlsYXIgdG8gYWR1bHRzJyBCT0RZIGZhY3RvciAoYHIgY29uZ19yZXBvcnRfZnVuKGVmYV9hZCA9IGVmYV93ZG1fZDNfYWQsIGVmYV9jaCA9IGVmYV93ZG1fZDNfNDYsIGZhY3RvciA9ICJGMyIsIGZhY3Rvcl9uYW1lc19hZCA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpKWApLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kM180NiwgNCwgIkYzIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kM180NiRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMyJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLCBhbmQgYHIgcm91bmQoZWZhX3dkbV9kM180NiRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIFZhciIsICJGMyJdLCAyKSAqIDEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuCgpUb2dldGhlciwgdGhlc2UgdGhyZWUgZmFjdG9ycyBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKHN1bShlZmFfd2RtX2QzXzQ2JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgXSksIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4KClNlZSBGaWd1cmUgMy4zIGZvciBhbGwgZmFjdG9yIGxvYWRpbmdzLCBhbmQgVGFibGUgMy4yIGZvciBjb3NpbmUgc2ltaWxhcml0aWVzIGJldHdlZW4gY2hpbGQgYW5kIGFkdWx0IGZhY3RvcnMuCgpJIHdvdWxkIGRlc2NyaWJlIHRoaXMgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgYXMgcmVtaW5pc2NlbnQgb2YgdGhlIEJPRFktSEVBUlQtTUlORCBzdHJ1Y3R1cmUgZm91bmQgYW1vbmcgb2xkZXIgY2hpbGRyZW4gYW5kIGFkdWx0cywgYnV0IG5vdCBhcyBmdWxseSAiYWR1bHQtbGlrZS4iIEluIHBhcnRpY3VsYXIsIGluIHRoaXMgc29sdXRpb24sIHRoZSBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBCT0RZIGFtb25nIG9sZGVyIGNoaWxkcmVuIGFuZCBhZHVsdHMgYXJlIG5vdCBhcyBjbGVhcmx5IGRpZmZlcmVudGlhdGVkIGZyb20gdGhlIGVtb3Rpb25hbCBleHBlcmllbmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIEhFQVJULiBJbmRlZWQsIGl0IGl0IG5vdCBjbGVhciB0aGF0IEJPRFkgdnMuIEhFQVJUIGlzIHRoZSBtb3N0IHNhbGllbnQgZGlzdGluY3Rpb24gYW1vbmcgdGhlIGZpcnN0IGFuZCB0aGlyZCBmYWN0b3JzIGluIHRoaXMgc29sdXRpb247IGEgY2xlYW5lciBkZXNjcmlwdGlvbiBvZiB0aGVzZSBmYWN0b3JzIG1pZ2h0IGJlIG5lZ2F0aXZlbHktdmFsZW5jZWQgZXhwZXJpZW5jZXMgdnMuIHBvc2l0aXZlbHktdmFsZW5jZWQgZXhwZXJpZW5jZXMuIAoKYGBge3J9CnBsb3RfZWZhX3dkbV9kM19hZCA8LSBoZWF0bWFwX2Z1bihlZmFfd2RtX2QzX2FkLCBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kM19hZCkgKwogIGxhYnModGl0bGUgPSAiQWR1bHRzIiwgc3VidGl0bGUgPSAiMy1mYWN0b3Igc29sdXRpb24iKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpwbG90X2VmYV93ZG1fZDNfNzkgPC0gaGVhdG1hcF9mdW4oZWZhX3dkbV9kM183OSwgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNzkpICsKICBsYWJzKHRpdGxlID0gIk9sZGVyIGNoaWxkcmVuLCA3LTl5Iiwgc3VidGl0bGUgPSAiMy1mYWN0b3Igc29sdXRpb24iKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpwbG90X2VmYV93ZG1fZDNfNDYgPC0gaGVhdG1hcF9mdW4oZWZhX3dkbV9kM180NiwgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNDYpICsKICBsYWJzKHRpdGxlID0gIllvdW5nZXIgY2hpbGRyZW4sIDQtNnkiLCBzdWJ0aXRsZSA9ICIzLWZhY3RvciBzb2x1dGlvbiIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCnBsb3RfZWZhX3Bhcl9kM180NiA8LSBoZWF0bWFwX2Z1bihlZmFfcGFyX2QzXzQ2LCBmYWN0b3JfbmFtZXNfZWZhX3Bhcl9kM180NikgKwogIGxhYnModGl0bGUgPSAiWW91bmdlciBjaGlsZHJlbiwgNC02eSIsIHN1YnRpdGxlID0gIjItZmFjdG9yIHNvbHV0aW9uIikKYGBgCgpgYGB7cn0KZmlndXJlMy4zIDwtIHBsb3RfZ3JpZChwbG90X2VmYV93ZG1fZDNfYWQsIHBsb3RfZWZhX3dkbV9kM183OSwKICAgICAgICAgICAgICAgICAgICAgICBwbG90X2VmYV93ZG1fZDNfNDYsIHBsb3RfZWZhX3Bhcl9kM180NiwKICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSAiQVVUTyIsIG5jb2wgPSA0LCByZWxfd2lkdGhzID0gYygxLCAxLCAxLCAxKSkKCmZpZ3VyZTMuM19jYXAgPC0gYWRkX3N1YihmaWd1cmUzLjMsIHN0cl93cmFwKCJGaWd1cmUgMy4zOiBGYWN0b3IgbG9hZGluZ3MgZnJvbSBleHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzZXMgb2YgU3R1ZHkgMywgaW4gd2hpY2ggcGFydGljaXBhbnRzIGFzc2Vzc2VkIG9uZSBvZiBuaW5lIGRpdmVyc2UgdGFyZ2V0IGNoYXJhY3RlcnMuIChBKSBSZXN1bHRzIGZvciBVUyBhZHVsdHMuIChCKSBSZXN1bHRzIGZvciBVUyBjaGlsZHJlbiBhZ2VzIDctOXkuIChDKSBSZXN1bHRzIGZvciBVUyBjaGlsZHJlbiBhZ2VzIDQtNnksIHJldGFpbmluZyB0aHJlZSBmYWN0b3JzIChhcyBzdWdnZXN0ZWQgYnkgdGhlIG9yaWdpbmFsIGZhY3RvciByZXRlbnRpb24gY3JpdGVyaWEgcmVwb3J0ZWQgaW4gV2Vpc21hbiBldCBhbC4sIDIwMTcpLiAoRCkgUmVzdWx0cyBmb3IgVVMgY2hpbGRyZW4gYWdlcyA0LTZ5LCByZXRhaW5pbmcgdHdvIGZhY3RvcnMgKGFzIHN1Z2dlc3RlZCBwYXJhbGxlbCBhbmFseXNpcykuIEluIHRoaXMgYW5kIGFsbCBmaWd1cmVzIHBvcnRyYXlpbmcgZmFjdG9yIGxvYWRpbmdzLCBmYWN0b3JzIGhhdmUgYmVlbiBwbG90dGVkIGluIHRoZSBzYW1lIG9yZGVyIChCT0RZLCBIRUFSVCwgTUlORCksIHdoZW4gYXBwbGljYWJsZSwgdG8gZmFjaWxpdGF0ZSBjb21wYXJpc29uIGFjcm9zcyBzdHVkaWVzLiBBIGZhY3RvciBsb2FkaW5nIG9mICsxIGluZGljYXRlcyBhIHBlcmZlY3RseSBwb3NpdGl2ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBtZW50YWwgY2FwYWNpdHkgYW5kIHVuZGVybHlpbmcgY29uc3RydWN0OyBhIGxvYWRpbmcgb2YgLTEgaW5kaWNhdGVzIGEgcGVyZmVjdGx5IG5lZ2F0aXZlIHJlbGF0aW9uc2hpcC4iLCAyMTApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyIGZpZ3VyZTMuMywgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDksIGZpZy5hc3AgPSAwLjZ9CmdnZHJhdyhmaWd1cmUzLjNfY2FwKQpgYGAKCiMjIERpc2N1c3Npb24KClRoZSByZXN1bHRzIG9mIFN0dWR5IDMgc3VnZ2VzdCB0aGF0IHRoZSB0aHJlZS1wYXJ0IGNvbmNlcHR1YWwgc3RydWN0dXJl4oCUYW5jaG9yZWQgYnkgQk9EWSwgSEVBUlQsIGFuZCBNSU5E4oCUaXMgcmVsaWFibGUgYW5kIHJvYnVzdCBhbW9uZyA3LSB0byA5LXllYXItb2xkIFVTIGNoaWxkcmVuLiBBcyB3aXRoIGFkdWx0cyBpbiBTdHVkeSAxIChzZWUgYWxzbyBXZWlzbWFuIGV0IGFsLiwgMjAxNyksIHRoZSBjYXBhY2l0aWVzIHRoYXQgImhhbmcgdG9nZXRoZXIiIGluIG9sZGVyIGNoaWxkcmVuJ3MgcmVhc29uaW5nIHdoZW4gdGFyZ2V0IGNoYXJhY3RlcnMgYXJlIHBlcmNlaXZlZCB0byB2YXJ5IGluIG1lbnRhbCBjYXBhY2l0eSBwcm9maWxlcyBhcHBlYXIgdG8gYmUgaGlnaGx5IHNpbWlsYXIgdG8gdGhvc2UgdGhhdCAiaGFuZyB0b2dldGhlciIgd2hlbiBwYXJ0aWNpcGFudHMgZGlzYWdyZWUgYWJvdXQgdGhlIG1lbnRhbCBsaXZlcyBvZiBjb250cm92ZXJzaWFsICJlZGdlIGNhc2VzIiBpbiBzb2NpYWwgcmVhc29uaW5nIChTdHVkeSAyKS4KCk1lYW53aGlsZSwgdGhpcyBzdHVkeSBzdWdnZXN0cyB0aGF0IHRoaXMgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgdW5kZXJnb2VzIHN1YnN0YW50aWFsIGNoYW5nZXMgYmV0d2VlbiBlYXJseSBhbmQgbWlkZGxlIGNoaWxkaG9vZC4gTGlrZSBvbGRlciBjaGlsZHJlbiBhbmQgYWR1bHRzLCA0LSB0byA2LXllYXItb2xkIGNoaWxkcmVu4oCZcyByZXNwb25zZXMgd2VyZSBjaGFyYWN0ZXJpemVkIGJ5IHN0cm9uZyBjb3JyZWxhdGlvbnMgYW1vbmcgYSBzdWl0ZSBvZiBwZXJjZXB0dWFsIGFuZCBjb2duaXRpdmUgY2FwYWNpdGllcyB0aGF0IEkgaGF2ZSBsYWJlbGVkIE1JTkQuIFRoaXMgaGlnaGxpZ2h0cyBvbmUgYXNwZWN0IG9mIGNvbmNlcHR1YWwgc3RydWN0dXJlIHRoYXQgc2VlbXMgdG8gYmUgcmVsYXRpdmVseSBzdGFibGUgZnJvbSBlYXJseSBjaGlsZGhvb2Qgb253YXJkLiBIb3dldmVyLCBpbiBjb250cmFzdCB0byB0aGUgY2xlYXIgZGlzdGluY3Rpb24gYmV0d2VlbiBwaHlzaW9sb2dpY2FsIGFiaWxpdGllcyBhbmQgc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgdGhhdCBjaGFyYWN0ZXJpemVkIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMgYW1vbmcgb2xkZXIgY2hpbGRyZW4gYW5kIGFkdWx0cywgeW91bmdlciBjaGlsZHJlbuKAmXMgcmVzcG9uc2VzIHN1Z2dlc3QgdGhhdCB0aGV5IHBlcmNlaXZlZCBwaHlzaW9sb2dpY2FsIGFuZCBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyB0byBiZSBtb3JlIGNsb3NlbHkgaW50ZWdyYXRlZCBhbmQgdGhlIGxpbmUgYmV0d2VlbiB0aGVtIHRvIGJlIG1vcmUgYmx1cnJlZC4KCmBgYHtyfQplZmFfcGFyX2QzXzQ2X2hpZ2hsb2FkIDwtIGxvYWRpbmdzX2Z1bihlZmFfcGFyX2QzXzQ2LCAibG9uZyIpICU+JSAKICBmaWx0ZXIobG9hZGluZyA+PSAwLjYwKSAlPiUKICBhcnJhbmdlKGZhY3RvciwgZGVzYyhsb2FkaW5nKSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIG11dGF0ZShhZHVsdF9mYWN0b3IgPSBjYXNlX3doZW4oCiAgICBncmVwbChjYXBhY2l0eSwgCiAgICAgICAgICB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kM19hZCwgMjAsICJGMSIsICJwb3MiKSkgPT0gVCB+ICJCT0RZIiwKICAgIGdyZXBsKGNhcGFjaXR5LCAKICAgICAgICAgIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QzX2FkLCAyMCwgIkYyIiwgInBvcyIpKSA9PSBUIH4gIkhFQVJUIiwKICAgIGdyZXBsKGNhcGFjaXR5LCAKICAgICAgICAgIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QzX2FkLCAyMCwgIkYzIiwgInBvcyIpKSA9PSBUIH4gIk1JTkQiLAogICAgVFJVRSB+ICJubyBkb21pbmFudCBmYWN0b3IiKSkgJT4lCiAgdW5ncm91cCgpCmVmYV9wYXJfZDNfNDZfaGlnaGxvYWQKYGBgCgpPbmUgaW5kaWNhdGlvbiBvZiB0aGlzIGJsdXJyaW5nIGNvbWVzIGZyb20gdGhlIHR3by1mYWN0b3Igc29sdXRpb24gc3VnZ2VzdGVkIGJ5IHBhcmFsbGVsIGFuYWx5c2lzLCBpbiB3aGljaCBhIHNpbmdsZSBCT0RZLUhFQVJUIGZhY3RvciBlbWVyZ2VkIGFuZCB3YXMgaGlnaGx5IGNvbmdydWVudCB3aXRoIGJvdGggdGhlIEJPRFkgYW5kIEhFQVJUIGZhY3RvcnMgb2YgYWR1bHRzIChjb3NpbmUgc2ltaWxhcml0eSB3aXRoIEJPRFk6IGByIGNvbmdfZWZhX3Bhcl9kM19hZF80NlsiRjEiLCAiQk9EWSJdYDsgd2l0aCBIRUFSVDogYHIgY29uZ19lZmFfcGFyX2QzX2FkXzQ2WyJGMSIsICJIRUFSVCJdYCkgZmFjdG9ycyBvZiBhZHVsdHMuIEFtb25nIHRoZSBtZW50YWwgY2FwYWNpdGllcyB0aGF0IGxvYWRlZCBzdHJvbmdseSAoJFxnZXEkIDAuNjApIG9uIHRoaXMgZmFjdG9yIHdlcmUgYm90aCBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgKGUuZy4sIGByIGl0YWxfYnlfY2FwX2Z1bihlZmFfcGFyX2QzXzQ2X2hpZ2hsb2FkJGNhcGFjaXR5W2VmYV9wYXJfZDNfNDZfaGlnaGxvYWQkYWR1bHRfZmFjdG9yPT0iQk9EWSIgJiBlZmFfcGFyX2QzXzQ2X2hpZ2hsb2FkJGZhY3RvciA9PSAiRjEiICYgZWZhX3Bhcl9kM180Nl9oaWdobG9hZCRjYXBhY2l0eSAhPSAiZ2V0IGFuZ3J5Il0pYCkgYW5kIHNvY2lhbC1lbW90aW9uYWwgZXhwZXJpZW5jZXMgKGByIGl0YWxfYnlfY2FwX2Z1bihlZmFfcGFyX2QzXzQ2X2hpZ2hsb2FkJGNhcGFjaXR5W2VmYV9wYXJfZDNfNDZfaGlnaGxvYWQkYWR1bHRfZmFjdG9yPT0iSEVBUlQiICYgZWZhX3Bhcl9kM180Nl9oaWdobG9hZCRmYWN0b3IgPT0gIkYxIl0pYCksIHN1Z2dlc3RpbmcgdGhhdCB5b3VuZ2VyIGNoaWxkcmVuIHBlcmNlaXZlZCBwaHlzaW9sb2dpY2FsIGFuZCBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyB0byAiZ28gdG9nZXRoZXIiIHRvIGEgY29uc2lkZXJhYmxlIGRlZ3JlZS4KCmBgYHtyfQplZmFfd2RtX2QzXzQ2X2RvbUNhcCA8LSBsb2FkaW5nc19mdW4oZWZhX3dkbV9kM180NiwgImxvbmciKSAlPiUgCiAgYXJyYW5nZShkZXNjKGxvYWRpbmcpKSAlPiUKICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgdG9wX24oMSwgbG9hZGluZykgJT4lCiAgbXV0YXRlKGFkdWx0X2ZhY3RvciA9IGNhc2Vfd2hlbigKICAgIGdyZXBsKGNhcGFjaXR5LCAKICAgICAgICAgIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QzX2FkLCAyMCwgIkYxIiwgInBvcyIpKSA9PSBUIH4gIkJPRFkiLAogICAgZ3JlcGwoY2FwYWNpdHksIAogICAgICAgICAgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDNfYWQsIDIwLCAiRjIiLCAicG9zIikpID09IFQgfiAiSEVBUlQiLAogICAgZ3JlcGwoY2FwYWNpdHksIAogICAgICAgICAgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDNfYWQsIDIwLCAiRjMiLCAicG9zIikpID09IFQgfiAiTUlORCIsCiAgICBUUlVFIH4gIm5vIGRvbWluYW50IGZhY3RvciIpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgYXJyYW5nZShmYWN0b3IsIGRlc2MobG9hZGluZykpCmVmYV93ZG1fZDNfNDZfZG9tQ2FwCmBgYAoKYGBge3J9CmVmYV93ZG1fZDNfNDZfbG93bG9hZCA8LSBsb2FkaW5nc19mdW4oZWZhX3dkbV9kM180NiwgImxvbmciKSAlPiUgCiAgZmlsdGVyKGxvYWRpbmcgPD0gMC40MCkgJT4lCiAgYXJyYW5nZShmYWN0b3IsIGRlc2MobG9hZGluZykpICU+JQogIGdyb3VwX2J5KGZhY3RvciwgY2FwYWNpdHkpICU+JQogIG11dGF0ZShhZHVsdF9mYWN0b3IgPSBjYXNlX3doZW4oCiAgICBncmVwbChjYXBhY2l0eSwgCiAgICAgICAgICB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kM19hZCwgMjAsICJGMSIsICJwb3MiKSkgPT0gVCB+ICJCT0RZIiwKICAgIGdyZXBsKGNhcGFjaXR5LCAKICAgICAgICAgIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QzX2FkLCAyMCwgIkYyIiwgInBvcyIpKSA9PSBUIH4gIkhFQVJUIiwKICAgIGdyZXBsKGNhcGFjaXR5LCAKICAgICAgICAgIHRvcF9uX2RvbUNhcChlZmFfd2RtX2QzX2FkLCAyMCwgIkYzIiwgInBvcyIpKSA9PSBUIH4gIk1JTkQiLAogICAgVFJVRSB+ICJubyBkb21pbmFudCBmYWN0b3IiKSkgJT4lCiAgdW5ncm91cCgpCmVmYV93ZG1fZDNfNDZfbG93bG9hZApgYGAKCkV2ZW4gaW4gdGhlIHRocmVlLWZhY3RvciBzb2x1dGlvbiBzdWdnZXN0ZWQgYnkgdGhlIG9yaWdpbmFsIGZhY3RvciByZXRlbnRpb24gY3JpdGVyaWEgcmVwb3J0ZWQgaW4gV2Vpc21hbiBldCBhbC4gKDIwMTcpLCB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBwaHlzaW9sb2dpY2FsIGFuZCBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyB3YXMgc29tZXdoYXQgYmx1cnJlZC4gV2hpbGUgdGhlIGZpcnN0IGZhY3Rvciwgd2hpY2ggSSBoYXZlIGxhYmVsZWQgQk9EWVwqLCB3YXMgaGlnaGx5IGNvbmdydWVudCB3aXRoIGFkdWx0cycgQk9EWSBmYWN0b3IgKGNvc2luZSBzaW1pbGFyaXR5OiBgciBjb25nX2VmYV93ZG1fZDNfYWRfNDZbIkYxIiwgIkJPRFkiXWApLCBpdCB3YXMgYWxzbyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciB0d28gY2Fub25pY2FsIHNvY2lhbC1lbW90aW9uYWwgaXRlbXMgKGByIGl0YWxfYnlfY2FwX2Z1bihlZmFfd2RtX2QzXzQ2X2RvbUNhcCRjYXBhY2l0eVtlZmFfd2RtX2QzXzQ2X2RvbUNhcCRmYWN0b3IgPT0gIkYxIiAmIGVmYV93ZG1fZDNfNDZfZG9tQ2FwJGFkdWx0X2ZhY3RvciA9PSAiSEVBUlQiXSlgKS4gQW5kIHdoaWxlIHRoZSB0aGlyZCBmYWN0b3IsIHdoaWNoIEkgaGF2ZSBsYWJlbGVkIEhFQVJUXCosIHdhcyBoaWdobHkgY29uZ3J1ZW50IHdpdGggYWR1bHRzJyBIRUFSVCBmYWN0b3IgKGNvc2luZSBzaW1pbGFyaXR5OiBgciBjb25nX2VmYV93ZG1fZDNfYWRfNDZbIkYzIiwgIkhFQVJUIl1gKSwgdGhlcmUgd2VyZSBzZXZlcmFsIGNhbm9uaWNhbCBzb2NpYWwtZW1vdGlvbmFsIGl0ZW1zIHRoYXQgZmFpbGVkIHRvIGxvYWQgc3Ryb25nbHkgb24gaXQgKGxvYWRpbmdzICRcbGVxJCAwLjQwOiBgciBpdGFsX2J5X2NhcF9mdW4oZWZhX3dkbV9kM180Nl9sb3dsb2FkJGNhcGFjaXR5W2VmYV93ZG1fZDNfNDZfbG93bG9hZCRmYWN0b3IgPT0gIkYzIiAmIGVmYV93ZG1fZDNfNDZfbG93bG9hZCRhZHVsdF9mYWN0b3IgPT0gIkhFQVJUIl0pYCkuIFN0ZXBwaW5nIGJhY2ssIGl0IGlzIG5vdCBjbGVhciB0aGF0ICJwaHlzaW9sb2dpY2FsIHZzLiBzb2NpYWwtZW1vdGlvbmFsIiBpcyB0aGUgYmVzdCB3YXkgdG8gY2hhcmFjdGVyaXplIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZXNlIHR3byBmYWN0b3JzLiBJbiBmYWN0LCBnaXZlbiB0aGF0IHRoZSBzdHJvbmdlc3QtbG9hZGluZyBpdGVtcyBmb3IgQk9EWVwqIHdlcmUgbmVnYXRpdmVseSB2YWxlbmNlZCAoYHIgZ3N1YigiYW5kICIsICIiLCB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kM180NiwgMywgIkYxIiwgImFicyIpKWApIHdoaWxlIHRoZSBzdHJvbmdlc3QtbG9hZGluZyBpdGVtcyBmb3IgSEVBUlRcKiB3ZXJlIHBvc2l0aXZlbHkgdmFsZW5jZWQgKGByIGdzdWIoImFuZCAiLCAiIiwgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDNfNDYsIDMsICJGMyIsICJhYnMiKSlgKSwgaXQgc2VlbXMgcGxhdXNpYmxlIHRoYXQgdGhlIG1vcmUgc2FsaWVudCBkaXN0aW5jdGlvbiBhbW9uZyB0aGlzIGFnZSBncm91cCBtYXkgaGF2ZSBiZWVuIHBvc2l0aXZlIHZzLiBuZWdhdGl2ZSB2YWxlbmNlLCByYXRoZXIgdGhhbiBCT0RZIHZzLiBIRUFSVC4gVGhlIHNhbGllbmNlIG9mIG5lZ2F0aXZlIHZzLiBwb3NpdGl2ZSBleHBlcmllbmNlcyBhbW9uZyB5b3VuZ2VyIGNoaWxkcmVuIGlzIGNvbnNpc3RlbnQgd2l0aCByZWNlbnQgd29yayBvbiB0aGUgZGV2ZWxvcG1lbnQgb2YgZW1vdGlvbiBjb25jZXB0cywgd2hpY2ggc3VnZ2VzdHMgdGhhdCBlbW90aW9uIHJlcHJlc2VudGF0aW9ucyBhcmUgZG9taW5hdGVkIGJ5IGEgc2luZ2xlIGRpbWVuc2lvbiBvZiB2YWxlbmNlIGluIGVhcmx5IHRvIG1pZGRsZSBjaGlsZGhvb2QsIGJlZm9yZSB1bmZvbGRpbmcgaW50byBhIHR3by1kaW1lbnNpb25hbCBzcGFjZSBjaGFyYWN0ZXJpemVkIGJ5IHZhbGVuY2UgYW5kIGFyb3VzYWwgb3ZlciB0aGUgY291cnNlIG9mIGxhdGVyIGNoaWxkaG9vZCBhbmQgYWRvbGVzY2VuY2UgKE5vb2sgZXQgYWwuLCAyMDE3KS4KCkZpbmFsbHksIHRoZSB2ZXJ5IGZhY3QgdGhhdCBkaWZmZXJlbnQgYXBwcm9hY2hlcyB0byBmYWN0b3IgcmV0ZW50aW9uIHlpZWxkZWQgZGlmZmVyZW50IHJlc3VsdHMgaXMgZnVydGhlciBldmlkZW5jZSB0aGF0LCBhbHRob3VnaCB0aGVyZSBpcyBzb21lIGV2aWRlbmNlIGZvciBhIG5hc2NlbnQgZGlzdGluY3Rpb24gYmV0d2VlbiBCT0RZIGFuZCBIRUFSVCBhbW9uZyA0LSB0byA2LXllYXItb2xkIGNoaWxkcmVuLCB0aGlzIGRpc3RpbmN0aW9uIHdhcyBub3QgYXMgcm9idXN0IGFzIGl0IGFwcGVhcmVkIHRvIGJlIGFtb25nIG9sZGVyIGNoaWxkcmVuIG9yIGFkdWx0cy4KCiMgU3R1ZHkgNDogQSBmb2N1cyBvbiBlYXJseSBjaGlsZGhvb2QgKDQtNXkpCgpPbmUgbWFqb3IgbGltaXRhdGlvbiBvZiBTdHVkaWVzIDIgYW5kIDMgd2FzIHRoYXQgdGhlIHN0dWR5IHByb3RvY29sIGludm9sdmVkIGEgcmF0aGVyIGFkdmFuY2VkIHNldCBvZiBtZW50YWwgc3RhdGUgdm9jYWJ1bGFyeSB0ZXJtcywgaW5jbHVkaW5nIGEgdmFyaWV0eSBvZiBjb21wbGV4IG1lbnRhbCBjYXBhY2l0aWVzIChlLmcuLCBndWlsdCwgcHJpZGUsIGF3YXJlbmVzcywgZGVwdGggcGVyY2VwdGlvbikgYW5kIHVzaW5nIHNvbWV3aGF0IGNvbXBsaWNhdGVkIHN5bnRheCBmb3Igc29tZSBpdGVtcyAoZS5nLiwgX3NlbnNlIHdoZXRoZXIgc29tZXRoaW5nIGlzIGNsb3NlIGJ5IG9yIGZhciBhd2F5XywgX2ZpZ3VyZSBvdXQgaG93IHRvIGRvIHRoaW5nc18pLiBGb3IgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiwgaW4gcGFydGljdWxhciwgc29tZSBvZiB0aGUgbWVudGFsIGNhcGFjaXR5IGl0ZW1zIG1pZ2h0IGhhdmUgYmVlbiBvdXRzaWRlIG9mIHRoZSByYW5nZSBvZiB3b3JkcyB0aGV5IG5vcm1hbGx5IGhlYXIgaW4gZGlzY3Vzc2lvbnMgb2YgbWVudGFsIHN0YXRlc+KAlGxldCBhbG9uZSB0aGUgd29yZHMgdGhleSBub3JtYWxseSB1c2UgdGhlbXNlbHZlcy4gSW4gYWRkaXRpb24sIHlvdW5nZXIgY2hpbGRyZW4gbWF5IGhhdmUgZm91bmQgc29tZSBhc3BlY3RzIG9mIHRoZSBleHBlcmltZW50YWwgcGFyYWRpZ20gZGlzdHJhY3RpbmcgKGUuZy4sIGJlaW5nIHNlYXRlZCBpbiBmcm9udCBvZiB0aGUgZXhwZXJpbWVudGVyJ3MgbGFwdG9wIGNvbXB1dGVyIHdpdGhvdXQgYmVpbmcgYWxsb3dlZCB0byB1c2UgaXQgdGhlbXNlbHZlcykgb3IgZGlmZmljdWx0IChlLmcuLCB1c2luZyBhIHRocmVlLXBvaW50IHNjYWxlIHdpdGggbWluaW1hbCB2aXN1YWwgc2NhZmZvbGRpbmcpLgoKV2l0aCB0aGVzZSBjb25zaWRlcmF0aW9ucyBpbiBtaW5kLCBpbiBTdHVkeSA0IEkgZm9jdXNlZCBvbiA0LSB0byA1LXllYXItb2xkIGNoaWxkcmVuLCB1c2luZyBhIHNpbXBsZXIgc2V0IG9mIG1lbnRhbCBjYXBhY2l0aWVzIGFuZCBhIHN0cmVhbWxpbmVkIHZlcnNpb24gb2YgdGhlIGV4cGVyaW1lbnRhbCBwYXJhZGlnbSwgd2l0aCB0aGUgYWltIG9mIGdldHRpbmcgYSBjbGVhcmVyIHBpY3R1cmUgb2YgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgYW5kIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMgYXQgdGhpcyBlYXJsaWVyIHBvaW50IGluIGRldmVsb3BtZW50LgoKSW4gU3R1ZHkgNCwgYHIgbnJvdyhkNF9hZF93aWRlKS8yYCBVUyBhZHVsdHMgYW5kIGByIG5yb3coZDRfNDZfd2lkZSkvMmAgVVMgY2hpbGRyZW4gYmV0d2VlbiB0aGUgYWdlcyBvZiBgciBzdW1tYXJ5KGQ0XzQ2JGFnZSlbIk1pbi4iXSAlPiUgcm91bmQoMilgLWByIHN1bW1hcnkoZDRfNDYkYWdlKVsiTWF4LiJdICU+JSByb3VuZCgyKWB5IChtZWRpYW46IGByIHN1bW1hcnkoZDRfNDYkYWdlKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpYHkpIGVhY2ggYXNzZXNzZWQgdHdvIHRhcmdldCBjaGFyYWN0ZXJzIG9uIDE4IG1lbnRhbCBjYXBhY2l0aWVzLiBUbyBtYWtlIHRoZSBzdHVkeSBhcHByb3ByaWF0ZSBmb3IgY2hpbGRyZW4gaW4gdGhpcyBhZ2UgcmFuZ2UsIHRoaXMgc3R1ZHkgZW1wbG95ZWQgYSBuZXcgc2V0IG9mIDE4IG1lbnRhbCBjYXBhY2l0aWVzIChzb21lIGJ1dCBub3QgYWxsIG9mIHdoaWNoIHdlcmUgdXNlZCBpbiBTdHVkaWVzIDEtMykuIEluIGFkZGl0aW9uLCBwYXJ0aWNpcGFudHMgd2VyZSBwcmVzZW50ZWQgd2l0aCBhIG1vcmUgY2hpbGQtZnJpZW5kbHkgdmlzdWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0aHJlZS1wb2ludCByZXNwb25zZSBzY2FsZSAoIm5vLCIgY29kZWQgYXMgMDsgImtpbmRhLCIgY29kZWQgYXMgMC41LCAieWVzLCIgY29kZWQgYXMgMSkuIFRoaXMgc3R1ZHkgZW1wbG95ZWQgdGhlICJlZGdlIGNhc2UiIHZhcmlhbnQgb2YgdGhlIGdlbmVyYWwgYXBwcm9hY2gsIHdpdGggcGFydGljaXBhbnRzIGFzc2Vzc2luZyBib3RoIGEgYmVldGxlIG9yIGEgcm9ib3QgaW4gc2VxdWVuY2UgKHdpdGggb3JkZXIgY291bnRlcmJhbGFuY2VkIGFjcm9zcyBwYXJ0aWNpcGFudHMpLiAoU2VlIENoYXB0ZXIgSUkgZm9yIGRldGFpbGVkIG1ldGhvZHMuKQoKQXMgYnJpZWZseSBkZXNjcmliZWQgaW4gQ2hhcHRlciBJSSwgdGhlIDE4IG1lbnRhbCBjYXBhY2l0aWVzIGVtcGxveWVkIGluIFN0dWR5IDQgd2VyZSBzZWxlY3RlZCBmcm9tIGEgbGFyZ2VyIHBpbG90IHN0dWR5IGluIHdoaWNoIDMtIHRvIDUteWVhci1vbGQgY2hpbGRyZW4gd2VyZSBhc2tlZCB0byBjb21wbGV0ZSBzdG9yaWVzIHRoYXQgYmVnYW4gd2l0aCBlYWNoIG9mIHRoZXNlIG1lbnRhbCBjYXBhY2l0aWVzIGFzIGEgcHJlbWlzZSAoZS5nLiwgIkxldCdzIGltYWdpbmUgYSBwZXJzb24gd2hvIF9sb3ZlcyBzb21lb25lXy4gV2hhdCBoYXBwZW5zIG5leHQ/IjsgIk5vdyBsZXQncyBwcmV0ZW5kIHRoYXQgc29tZW9uZSBfcmVtZW1iZXJzIHNvbWV0aGluZ18uIFdoYXQgaGFwcGVucyBuZXh0PyIpIGFuZCB3ZXJlIGp1ZGdlZCBvbiB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHRoZWlyIHN0b3J5IGNvbXBsZXRpb24uIAoKQW1vbmcgdGhlIGl0ZW1zIHRoYXQgZW1lcmdlZCBmcm9tIHRoaXMgcGlsb3Qgc3R1ZHkgYXMgcmVhc29uYWJsZSBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gaW4gU3R1ZHkgNCwgSSBzZWxlY3RlZCBpdGVtcyB0byByZXByZXNlbnRlZCB0aGUgdGhyZWUgImNvbmNlcHR1YWwgdW5pdHMiIHJldmVhbGVkIGJ5IFN0dWRpZXMgMS0zIChCT0RZLCBIRUFSVCwgYW5kIE1JTkQpLiBUaGUgZ29hbCBoZXJlIHdhcyB0byBjcmVhdGUgYSBjb25zZXJ2YXRpdmUgdGVzdCBvZiBkZXZlbG9wbWVudGFsIGRpZmZlcmVuY2VzIGJldHdlZW4geW91bmdlciBhbmQgb2xkZXIgY2hpbGRyZW4gaW4gdGhlICJjb25jZXB0dWFsIHVuaXRzIiBvYnNlcnZlZCBpbiBTdHVkeSAzLCBieSBjb25zdHJ1Y3RpbmcgbWF0ZXJpYWxzIHRoYXQgc2hvdWxkIG1heGltaXplIHRoZSBjaGFuY2VzIG9mIG9ic2VydmluZyB0aGUgc2FtZSAob3Igc2ltaWxhcikgY29uY2VwdHVhbCB1bml0cyBhbW9uZyB5b3VuZyBjaGlsZHJlbiBhcyB3ZXJlIG9ic2VydmVkIGFtb25nIG9sZGVyIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gU3R1ZGllcyAxLTMuIElmIDQtIHRvIDUteWVhci1vbGQgY2hpbGRyZW4gaW4gZmFjdCBoYXZlIGFjY2VzcyB0byBjb25jZXB0dWFsIHVuaXRzIHNpbWlsYXIgdG8gQk9EWSwgSEVBUlQsIGFuZCBNSU5ELCB0aGUgbWVudGFsIGNhcGFjaXRpZXMgZW1wbG95ZWQgaW4gU3R1ZHkgNCAoYW5kIHRoZSBnZW5lcmFsbHkgbW9yZSBjaGlsZC1mcmllbmRseSBwcm90b2NvbCkgc2hvdWxkIHByb3ZpZGUgdGhlIGJlc3QgY2hhbmNlcyBvZiBzdXJmYWNlcyB0aGlzIGNvbmNlcHR1YWwgc3RydWN0dXJlLiBDb252ZXJzZWx5LCBpZiBTdHVkeSA0IHJldmVhbHMgZGlmZmVyZW5jZXMgaW4gY29uY2VwdHVhbCBzdHJ1Y3R1cmUgZGVzcGl0ZSB0aGVzZSBtb2RpZmljYXRpb25zLCBhbmQgZGVzcGl0ZSAic3RhY2tpbmcgdGhlIG9kZHMiIGFnYWluc3QgZGV2ZWxvcG1lbnRhbCBkaWZmZXJlbmNlcyBpbiB0aGUgc2VsZWN0aW9uIG9mIG1lbnRhbCBjYXBhY2l0aWVzLCB0aGlzIHByb3ZpZGVzIHN0cm9uZ2VyIGV2aWRlbmNlIGZvciBjb25jZXB0dWFsIGNoYW5nZSBpbiB0aGUgbnVtYmVyIGFuZC9vciBraW5kIG9mIGNvbmNlcHR1YWwgdW5pdHMgYXZhaWxhYmxlIHRvIGNoaWxkcmVuIGF0IGRpZmZlcmVudCBwb2ludHMgaW4gZGV2ZWxvcG1lbnQuCgpUaGUgZmluYWwgc2V0IG9mIEJPRFkgaXRlbXMgaW5jbHVkZWQgX2ZlZWwgaHVuZ3J5XywgX2dldCB0aGlyc3R5XywgX2ZlZWwgc2lja18sIF9mZWVsIHRpcmVkXywgX2dldCBzY2FyZWRfLCBhbmQgX3NtZWxsIHRoaW5nc18uIEhFQVJUIGl0ZW1zIGluY2x1ZGVkIF9sb3ZlIHNvbWVvbmVfLCBfaGF0ZSBzb21lb25lXywgX2ZlZWwgaGFwcHlfLCBfZ2V0IHNhZF8sIF9mZWVsIHNvcnJ5XywgYW5kIF9nZXQgbG9uZWx5Xy4gTUlORCBpdGVtcyBpbmNsdWRlZCBfc2VlXywgX2hlYXJfLCBfdGhpbmtfLCBfcmVtZW1iZXIgdGhpbmdzXywgX2tub3cgc3R1ZmZfLCBhbmQgX2ZpZ3VyZSB0aGluZ3Mgb3V0XyAoc2VlIGFsc28gVGFibGUgMi4xIGluIENoYXB0ZXIgSUkpLiBJIGVuc3VyZWQgdGhhdCBlYWNoIGNhdGVnb3J5IGluY2x1ZGVkIGEgdmFyaWV0eSBvZiBwaHJhc2luZ3MgKGUuZy4sICJfZmVlbF8gaHVuZ3J5IiB2cy4gIl9nZXRfIHRoaXJzdHkiOyAicmVtZW1iZXIgX3RoaW5nc18iIHZzLiAia25vdyBfc3R1ZmZfIikgYW5kIHZhbGVuY2VzIHdoZW4gYXBwcm9wcmlhdGUgKGUuZy4sIGhhcHBpbmVzcyB2cy4gc2FkbmVzcyk7IHdoZW4gcG9zc2libGUsIEkgYWltZWQgdG8gaGF2ZSB0aGVzZSBhc3BlY3RzIG9mIHBocmFzaW5nIHZhcnkgb3J0aG9nb25hbGx5IHdpdGggY2F0ZWdvcmllcywgc3VjaCB0aGF0IHRoZSBmcmFtaW5ncyAiZ2V0IFgiIHZzLiAiZmVlbCBYIiBhcHBlYXJlZCByb3VnaGx5IGVxdWFsbHkgb2Z0ZW4gYW1vbmcgdGhlIEJPRFkgYW5kIEhFQVJUIGl0ZW1zLCBhbmQgdGhlIHdvcmQgInRoaW5ncyIgYXBwZWFyZWQgZXF1YWxseSBvZnRlbiBhbW9uZyB0aGUgQk9EWSBhbmQgTUlORCBpdGVtcy4KCiMjIFNwZWNpYWwgbm90ZXMgb24gZGF0YSBwcm9jZXNzaW5nIGFuZCBhbmFseXNpcwoKSW4gU3R1ZHkgNCwgcGFydGljaXBhbnRzIGFzc2Vzc2VkIHR3byB0YXJnZXQgY2hhcmFjdGVycyBzaWRlIGJ5IHNpZGUgKGluIGNvbnRyYXN0IHRvIFN0dWRpZXMgMWEsIDFiLCAxZCwgMiwgYW5kIDMsIGluIHdoaWNoIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQganVzdCBvbmUgdGFyZ2V0IGNoYXJhY3RlcikuIEluIHRoZSBjdXJyZW50IGFuYWx5c2VzLCBJIHRyZWF0IGVhY2ggcGFydGljaXBhbnQncyBhc3Nlc3NtZW50cyBvZiBlYWNoIHRhcmdldCBjaGFyYWN0ZXIgYXMgYSBzZXBhcmF0ZSBzZXQgb2Ygb2JzZXJ2YXRpb25zIChhcyBpZiB0aGV5IGNhbWUgZnJvbSBkaWZmZXJlbnQgcGFydGljaXBhbnRzKSwgaW4gZWZmZWN0IGRvdWJsaW5nIHRoZSBzYW1wbGUgc2l6ZSBmb3IgdGhlc2Ugc3R1ZGllcyAoYnV0IGlnbm9yaW5nIHRoZSB3aXRoaW4tc3ViamVjdCBkZXNpZ24pLgoKIyMgUmVzdWx0cwoKIyMjIEFkdWx0cwoKIyMjIyBIb3cgbWFueSBjb25jZXB0dWFsIHVuaXRzPwoKYGBge3J9CnJldGVuX3JlcG9ydFsiU3R1ZHkgNDogQWR1bHRzIixdCmBgYAoKYGBge3J9CmVmYV9wYXJfZDRfYWQgPC0gZmFfZnVuKGQ0X2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSA0OiBBZHVsdHMiLCAicGFyIl0pCmVmYV9iaWNfZDRfYWQgPC0gZmFfZnVuKGQ0X2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSA0OiBBZHVsdHMiLCAiYmljIl0pCmVmYV93ZG1fZDRfYWQgPC0gZmFfZnVuKGQ0X2FkX3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSA0OiBBZHVsdHMiLCAid2RtIl0pCgpzYXZlUkRTKGVmYV9wYXJfZDRfYWQsIGZpbGUgPSAiLi9lZmFzL2VmYV9wYXJfZDRfYWQiKQpzYXZlUkRTKGVmYV9iaWNfZDRfYWQsIGZpbGUgPSAiLi9lZmFzL2VmYV9iaWNfZDRfYWQiKQpzYXZlUkRTKGVmYV93ZG1fZDRfYWQsIGZpbGUgPSAiLi9lZmFzL2VmYV93ZG1fZDRfYWQiKQoKIyBlZmFfcGFyX2Q0X2FkIDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX3Bhcl9kNF9hZCIpCiMgZWZhX2JpY19kNF9hZCA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV9iaWNfZDRfYWQiKQojIGVmYV93ZG1fZDRfYWQgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfd2RtX2Q0X2FkIikKYGBgCgpBbGwgdGhyZWUgcHJvdG9jb2xzIGZvciBkZXRlcm1pbmluZyBob3cgbWFueSBmYWN0b3JzIHRvIHJldGFpbiBzdWdnZXN0ZWQgcmV0YWluaW5nIHRocmVlIGZhY3RvcnM7IHNlZSBUYWJsZSAzLjEuCgojIyMjIFdoYXQgYXJlIHRoZXNlIGNvbmNlcHR1YWwgdW5pdHM/CgpgYGB7cn0KZmFjdG9yX25hbWVzX2VmYV93ZG1fZDRfYWQgPC0gYygiQk9EWSIsICJIRUFSVCIsICJNSU5EIikKYGBgCgpBZnRlciByb3RhdGlvbiwgdGhlIGZpcnN0IGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyAoQk9EWSkuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2Q0X2FkLCA0LCAiRjEiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfd2RtX2Q0X2FkJFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYxIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24sIGFuZCBgciByb3VuZChlZmFfd2RtX2QzXzQ2JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgIkYxIl0sIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucywgYW5kIGByIHJvdW5kKGVmYV93ZG1fZDRfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBWYXIiLCAiRjEiXSwgMikgKiAxMDBgJSBvZiB0aGUgdG90YWwgdmFyaWFuY2UgaW4gcGFydGljaXBhbnRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLgoKVGhlIHNlY29uZCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyAoSEVBUlQpLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kNF9hZCwgNCwgIkYyIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kNF9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMiJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgdGhyZWUtZmFjdG9yIHNvbHV0aW9uLCBhbmQgYHIgcm91bmQoZWZhX3dkbV9kNF9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIFZhciIsICJGMiJdLCAyKSAqIDEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuCgpUaGUgdGhpcmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIChNSU5EKS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDRfYWQsIDQsICJGMyIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDRfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjMiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbiwgYW5kIGByIHJvdW5kKGVmYV93ZG1fZDRfYWQkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBWYXIiLCAiRjMiXSwgMikgKiAxMDBgJSBvZiB0aGUgdG90YWwgdmFyaWFuY2UgaW4gcGFydGljaXBhbnRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLgoKVG9nZXRoZXIsIHRoZXNlIHRocmVlIGZhY3RvcnMgYWNjb3VudGVkIGZvciBgciByb3VuZChzdW0oZWZhX3dkbV9kNF9hZCRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIFZhciIsIF0pLCAyKSAqIDEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuCgpTZWUgRmlndXJlIDMuNCBmb3IgYWxsIGZhY3RvciBsb2FkaW5ncy4KCkluIHN1bSwgYXMgaW4gU3R1ZGllcyAxLTMsIEVGQSBvZiBhZHVsdHMnIHJlc3BvbnNlcyByZXZlYWxlZCBhIGNvbmNlcHR1YWwgc3RydWN0dXJlIGNoYXJhY3Rlcml6ZWQgYnkgYSB0aHJlZS13YXkgZGlzdGluY3Rpb24gYmV0d2VlbiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgbW9kaWZpZWQgcHJlc2Nob29sZXItZnJpZW5kbHkgcGFyYWRpZ20gd2FzIHZhbGlkOiBVc2luZyBzaW1wbGVyIHZvY2FidWxhcnkgYW5kIGEgd2l0aGluLXN1YmplY3RzIGFwcHJvYWNoIHRvIHRhcmdldCBjaGFyYWN0ZXJzIGVsaWNpdGVkIHRoZSBzYW1lIGludHVpdGl2ZSBvbnRvbG9neSBvZiBtZW50YWwgbGlmZSwgYW1vbmcgVVMgYWR1bHRzLCB0aGF0IHdhcyByZXZlYWxlZCBpbiBTdHVkaWVzIDEtMy4gCgojIyMgQ2hpbGRyZW4gKDQtNXkpCgojIyMjIEhvdyBtYW55IGNvbmNlcHR1YWwgdW5pdHM/CgpgYGB7cn0KcmV0ZW5fcmVwb3J0WyJTdHVkeSA0OiBDaGlsZHJlbiIsXQpgYGAKCmBgYHtyfQplZmFfcGFyX2Q0XzQ2IDwtIGZhX2Z1bihkNF80Nl93aWRlX2ksIHJldGVuX3JlcG9ydFsiU3R1ZHkgNDogQ2hpbGRyZW4iLCAicGFyIl0pCmVmYV9iaWNfZDRfNDYgPC0gZmFfZnVuKGQ0XzQ2X3dpZGVfaSwgcmV0ZW5fcmVwb3J0WyJTdHVkeSA0OiBDaGlsZHJlbiIsICJiaWMiXSkKZWZhX3dkbV9kNF80NiA8LSBmYV9mdW4oZDRfNDZfd2lkZV9pLCByZXRlbl9yZXBvcnRbIlN0dWR5IDQ6IENoaWxkcmVuIiwgIndkbSJdKQoKc2F2ZVJEUyhlZmFfcGFyX2Q0XzQ2LCBmaWxlID0gIi4vZWZhcy9lZmFfcGFyX2Q0XzQ2IikKc2F2ZVJEUyhlZmFfYmljX2Q0XzQ2LCBmaWxlID0gIi4vZWZhcy9lZmFfYmljX2Q0XzQ2IikKc2F2ZVJEUyhlZmFfd2RtX2Q0XzQ2LCBmaWxlID0gIi4vZWZhcy9lZmFfd2RtX2Q0XzQ2IikKCiMgZWZhX3Bhcl9kNF80NiA8LSByZWFkUkRTKGZpbGUgPSAiLi9lZmFzL2VmYV9wYXJfZDRfNDYiKQojIGVmYV9iaWNfZDRfNDYgPC0gcmVhZFJEUyhmaWxlID0gIi4vZWZhcy9lZmFfYmljX2Q0XzQ2IikKIyBlZmFfd2RtX2Q0XzQ2IDwtIHJlYWRSRFMoZmlsZSA9ICIuL2VmYXMvZWZhX3dkbV9kNF80NiIpCmBgYAoKYGBge3J9CmVmYV9iaWNfZDRfNDYkVmFjY291bnRlZCAlPiUgZGF0YS5mcmFtZSgpICU+JSByb3VuZCgyKQpsb2FkaW5nc19jb3VudF9kb21fZnVuKGVmYV9iaWNfZDRfNDYpCmxvYWRpbmdzX3N1bW1hcml6ZV9mdW4oZWZhX2JpY19kNF80NikgJT4lIAogIG11dGF0ZV9hdCh2YXJzKC1mYWN0b3IpLCBmdW5zKHJvdW5kKC4sIDIpKSkKYGBgCgpgYGB7cn0KZWZhX3Bhcl9kNF80NiRWYWNjb3VudGVkICU+JSBkYXRhLmZyYW1lKCkgJT4lIHJvdW5kKDIpCmxvYWRpbmdzX2NvdW50X2RvbV9mdW4oZWZhX3Bhcl9kNF80NikKbG9hZGluZ3Nfc3VtbWFyaXplX2Z1bihlZmFfcGFyX2Q0XzQ2KSAlPiUgCiAgbXV0YXRlX2F0KHZhcnMoLWZhY3RvciksIGZ1bnMocm91bmQoLiwgMikpKQpgYGAKCmBgYHtyfQplZmFfd2RtX2Q0XzQ2JFZhY2NvdW50ZWQgJT4lIGRhdGEuZnJhbWUoKSAlPiUgcm91bmQoMikKbG9hZGluZ3NfY291bnRfZG9tX2Z1bihlZmFfd2RtX2Q0XzQ2KQpsb2FkaW5nc19zdW1tYXJpemVfZnVuKGVmYV93ZG1fZDRfNDYpICU+JSAKICBtdXRhdGVfYXQodmFycygtZmFjdG9yKSwgZnVucyhyb3VuZCguLCAyKSkpCmBgYAoKRWFjaCBvZiB0aGUgdGhyZWUgZmFjdG9yIHJldGVudGlvbiBwcm90b2NvbHMgc3VnZ2VzdGVkIGEgZGlmZmVyZW50IG51bWJlciBvZiBmYWN0b3JzIHRvIHJldGFpbjsgc2VlIFRhYmxlIDMuMS4KCkFzIGFtb25nIHlvdW5nZXIgY2hpbGRyZW4gaW4gU3R1ZHkgMywgbWluaW1pemluZyBCSUMgc3VnZ2VzdGVkIGEgbnVsbCBzb2x1dGlvbiBjb25zaXN0aW5nIG9mIGEgc2luZ2xlIGZhY3RvcjsgaW4gb3RoZXIgd29yZHMsIHRoaXMgcHJvdG9jb2wgaW5kaWNhdGVkIHRoYXQgdGhlIGNvcnJlbGF0aW9uIHN0cnVjdHVyZSBvZiBjaGlsZHJlbidzIHJlc3BvbnNlcyBwcm92aWRlZCBubyBldmlkZW5jZSBmb3IgZGlzdGluY3QgbGF0ZW50IGNvbnN0cnVjdHMuICAKCk1lYW53aGlsZSwgcGFyYWxsZWwgYW5hbHlzaXMgc3VnZ2VzdGVkIHJldGFpbmluZyB0aHJlZSBmYWN0b3JzLCBhbmQgdGhlIHJldGVudGlvbiBjcml0ZXJpYSB1c2VkIGluIFdlaXNtYW4gZXQgYWwuICgyMDE3KSBzdWdnZXN0ZWQgcmV0YWluaW5nIGZvdXIgZmFjdG9ycy4gSW4gYm90aCB0aGUgdGhyZWUtIGFuZCBmb3VyLWZhY3RvciBzb2x1dGlvbnMsIGVhY2ggZmFjdG9yIGFjY291bnRlZCBmb3IgYSBzdWJzdGFudGlhbCBhbW91bnQgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSwgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHNldmVyYWwgbWVudGFsIGNhcGFjaXRpZXMsIGFuZCBoYWQgYXQgbGVhc3QgbW9kZXJhdGVseSBzdHJvbmcgZmFjdG9yIGxvYWRpbmdzIGZvciBzb21lIHN1YnNldCBvZiBtZW50YWwgY2FwYWNpdGllcy4KCkdpdmVuIGFsbCB0aGlzLCBJIHdpbGwgcHJlc2VudCBhbmQgaW50ZXJwcmV0IGJvdGggdGhyZWUtIGFuZCBmb3VyLWZhY3RvciBzb2x1dGlvbnM7IHNlZSBBcHBlbmRpeCBBIGZvciB0aGUgbnVsbCwgb25lLWZhY3RvciBzb2x1dGlvbiBzdWdnZXN0ZWQgYnkgbWluaW1pemluZyBCSUMuCgojIyMjIFdoYXQgYXJlIHRoZXNlIGNvbmNlcHR1YWwgdW5pdHM/CgojIyMjIyBUaHJlZS1mYWN0b3Igc29sdXRpb24KCmBgYHtyfQpjb25nX2VmYV9wYXJfZDRfYWRfNDYgPC0gY29uZ190YWJsZV9mdW4oZWZhX2FkID0gZWZhX3dkbV9kNF9hZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmYV9jaCA9IGVmYV9wYXJfZDRfNDYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kNF9hZCkKY29uZ19lZmFfcGFyX2Q0X2FkXzQ2CmBgYAoKYGBge3J9CmZhY3Rvcl9uYW1lc19lZmFfcGFyX2Q0XzQ2IDwtIGMoIkJPRFkiLCAiTUlORCIsICJIRUFSVCIpCmBgYAoKRmlyc3QsIEkgd2lsbCBleGFtaW5lIHRoZSB0aHJlZS1mYWN0b3Igc29sdXRpb24gc3VnZ2VzdGVkIGJ5IHBhcmFsbGVsIGFuYWx5c2lzLiAgSW1wb3J0YW50bHksIHRoaXMgaXMgYWxzbyB0aGUgbnVtYmVyIG9mIGZhY3RvcnMgcmV0YWluZWQgYW1vbmcgVVMgYWR1bHRzIGluIHRoaXMgc3R1ZHkuCgpBZnRlciByb3RhdGlvbiwgdGhlIGZpcnN0IGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucy4gQW4gYW5hbHlzaXMgb2YgZmFjdG9yIGNvbmdydWVuY2UgaW5kaWNhdGVkIHRoYXQgdGhpcyBmYWN0b3Igd2FzIG1vc3Qgc2ltaWxhciB0byBhZHVsdHMnIEJPRFkgZmFjdG9yIChgciBjb25nX3JlcG9ydF9mdW4oZWZhX2FkID0gZWZhX3Bhcl9kNF9hZCwgZWZhX2NoID0gZWZhX3Bhcl9kNF80NiwgZmFjdG9yID0gIkYxIiwgZmFjdG9yX25hbWVzX2FkID0gZmFjdG9yX25hbWVzX2VmYV93ZG1fZDRfYWQpYCkuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfcGFyX2Q0XzQ2LCA0LCAiRjEiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfcGFyX2Q0XzQ2JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYxIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24sIGFuZCBgciByb3VuZChlZmFfcGFyX2Q0XzQ2JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgIkYxIl0sIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4KClRoZSBzZWNvbmQgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzLiBBbiBhbmFseXNpcyBvZiBmYWN0b3IgY29uZ3J1ZW5jZSBjb25maXJtZWQgdGhhdCB0aGlzIGZhY3RvciB3YXMgbW9zdCBzaW1pbGFyIHRvIGFkdWx0cycgTUlORCBmYWN0b3IgKGByIGNvbmdfcmVwb3J0X2Z1bihlZmFfYWQgPSBlZmFfcGFyX2Q0X2FkLCBlZmFfY2ggPSBlZmFfcGFyX2Q0XzQ2LCBmYWN0b3IgPSAiRjIiLCBmYWN0b3JfbmFtZXNfYWQgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kNF9hZClgKS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV9wYXJfZDRfNDYsIDQsICJGMiIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV9wYXJfZDRfNDYkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjIiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIHRocmVlLWZhY3RvciBzb2x1dGlvbiwgYW5kIGByIHJvdW5kKGVmYV9wYXJfZDRfNDYkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBWYXIiLCAiRjIiXSwgMikgKiAxMDBgJSBvZiB0aGUgdG90YWwgdmFyaWFuY2UgaW4gcGFydGljaXBhbnRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLgoKVGhlIHRoaXJkIGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzLiBBbiBhbmFseXNpcyBvZiBmYWN0b3IgY29uZ3J1ZW5jZSBjb25maXJtZWQgdGhhdCB0aGlzIGZhY3RvciB3YXMgbW9zdCBzaW1pbGFyIHRvIGFkdWx0cycgSEVBUlQgZmFjdG9yIChgciBjb25nX3JlcG9ydF9mdW4oZWZhX2FkID0gZWZhX3Bhcl9kNF9hZCwgZWZhX2NoID0gZWZhX3Bhcl9kNF80NiwgZmFjdG9yID0gIkYzIiwgZmFjdG9yX25hbWVzX2FkID0gZmFjdG9yX25hbWVzX2VmYV93ZG1fZDRfYWQpYCkuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfcGFyX2Q0XzQ2LCA0LCAiRjMiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfcGFyX2Q0XzQ2JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYzIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCB0aHJlZS1mYWN0b3Igc29sdXRpb24sIGFuZCBgciByb3VuZChlZmFfcGFyX2Q0XzQ2JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgIkYzIl0sIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4KClRvZ2V0aGVyLCB0aGVzZSB0aHJlZSBmYWN0b3JzIGFjY291bnRlZCBmb3IgYHIgcm91bmQoc3VtKGVmYV9wYXJfZDRfNDYkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBWYXIiLCBdKSwgMikgKiAxMDBgJSBvZiB0aGUgdG90YWwgdmFyaWFuY2UgaW4gcGFydGljaXBhbnRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLgoKU2VlIEZpZ3VyZSAzLjQgZm9yIGFsbCBmYWN0b3IgbG9hZGluZ3MsIGFuZCBUYWJsZSAzLjIgZm9yIGNvc2luZSBzaW1pbGFyaXRpZXMgYmV0d2VlbiBjaGlsZCBhbmQgYWR1bHQgZmFjdG9ycy4KCkkgd291bGQgZGVzY3JpYmUgdGhpcyBjb25jZXB0dWFsIHN0cnVjdHVyZSBhcyBzdHJvbmdseSByZW1pbmlzY2VudCBvZiB0aGUgQk9EWS1IRUFSVC1NSU5EIHN0cnVjdHVyZSBmb3VuZCBhbW9uZyBvbGRlciBjaGlsZHJlbiBhbmQgYWR1bHRzLiAKCl9fQ0hFQ0sgQkFDSyBXSVRIIE1PUkUgREFUQSFfXwoKIyMjIyMgRm91ci1mYWN0b3Igc29sdXRpb24KCmBgYHtyfQpjb25nX2VmYV93ZG1fZDRfYWRfNDYgPC0gY29uZ190YWJsZV9mdW4oZWZhX2FkID0gZWZhX3dkbV9kNF9hZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmYV9jaCA9IGVmYV93ZG1fZDRfNDYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kNF9hZCkKY29uZ19lZmFfd2RtX2Q0X2FkXzQ2CmBgYAoKYGBge3J9CmZhY3Rvcl9uYW1lc19lZmFfd2RtX2Q0XzQ2IDwtIGMoIk1JTkQqIiwgIkJPRFkgKG5hdXNlYSkiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQk9EWSAob3RoZXIpIiwgIkhFQVJUKiIpCmBgYAoKSSB3aWxsIG5vdyB0dXJuIHRvIHRoZSBmb3VyLWZhY3RvciBzb2x1dGlvbiBzdWdnZXN0ZWQgYnkgdGhlIGZhY3RvciByZXRlbnRpb24gY3JpdGVyaWEgZW1wbG95ZWQgaW4gdGhlIG9yaWdpbmFsIHB1YmxpY2F0aW9uIG9mIFN0dWR5IDEgKFdlaXNtYW4gZXQgYWwuLCAyMDE3KS4KCkFmdGVyIHJvdGF0aW9uLCB0aGUgZmlyc3QgZmFjdG9yIGNvcnJlc3BvbmRlZCBwcmltYXJpbHkgdG8gcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzLCBhcyB3ZWxsIGFzIHNvbWUgcG9zaXRpdmUgc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgKGUuZy4sIF9sb3ZlIHNvbWVvbmVfLCBfZmVlbCBoYXBweV8pLiBBbiBhbmFseXNpcyBvZiBmYWN0b3IgY29uZ3J1ZW5jZSBpbmRpY2F0ZWQgdGhhdCB0aGlzIGZhY3RvciB3YXMgbW9zdCBzaW1pbGFyIHRvIGFkdWx0cycgTUlORCBmYWN0b3IgKGByIGNvbmdfcmVwb3J0X2Z1bihlZmFfYWQgPSBlZmFfd2RtX2Q0X2FkLCBlZmFfY2ggPSBlZmFfd2RtX2Q0XzQ2LCBmYWN0b3IgPSAiRjEiLCBmYWN0b3JfbmFtZXNfYWQgPSBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kNF9hZClgKS4gSXQgd2FzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIHN1Y2ggaXRlbXMgYXMgYHIgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDRfNDYsIDQsICJGMSIsICJwb3MiKWAsIGFuZCBhY2NvdW50ZWQgZm9yIGByIHJvdW5kKGVmYV93ZG1fZDRfNDYkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBFeHBsYWluZWQiLCAiRjEiXSwgMikgKiAxMDBgJSBvZiB0aGUgc2hhcmVkIHZhcmlhbmNlIGluIHRoZSByb3RhdGVkIGZvdXItZmFjdG9yIHNvbHV0aW9uLCBhbmQgYHIgcm91bmQoZWZhX3dkbV9kNF80NiRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIFZhciIsICJGMSJdLCAyKSAqIDEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuCgpUaGUgc2Vjb25kIGZhY3RvciBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucywgd2l0aCBhbiBleGNlcHRpb25hbGx5IHN0cm9uZyBmYWN0b3IgbG9hZGluZyBmb3IgX2ZlZWwgc2lja18uIEFuIGFuYWx5c2lzIG9mIGZhY3RvciBjb25ncnVlbmNlIGNvbmZpcm1lZCB0aGF0IHRoaXMgZmFjdG9yIHdhcyBtb3N0IHNpbWlsYXIgdG8gYWR1bHRzJyBCT0RZIGZhY3RvciAoYHIgY29uZ19yZXBvcnRfZnVuKGVmYV9hZCA9IGVmYV93ZG1fZDRfYWQsIGVmYV9jaCA9IGVmYV93ZG1fZDRfNDYsIGZhY3RvciA9ICJGMiIsIGZhY3Rvcl9uYW1lc19hZCA9IGZhY3Rvcl9uYW1lc19lZmFfd2RtX2Q0X2FkKWApLiBJdCB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3Igc3VjaCBpdGVtcyBhcyBgciB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kNF80NiwgNCwgIkYyIiwgInBvcyIpYCwgYW5kIGFjY291bnRlZCBmb3IgYHIgcm91bmQoZWZhX3dkbV9kNF80NiRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIEV4cGxhaW5lZCIsICJGMiJdLCAyKSAqIDEwMGAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgaW4gdGhlIHJvdGF0ZWQgZm91ci1mYWN0b3Igc29sdXRpb24sIGFuZCBgciByb3VuZChlZmFfd2RtX2Q0XzQ2JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gVmFyIiwgIkYyIl0sIDIpICogMTAwYCUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucy4KClRoZSB0aGlyZCBmYWN0b3IgYWxzbyBjb3JyZXNwb25kZWQgcHJpbWFyaWx5IHRvIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucywgYXMgd2VsbCBhcyBzb21lIHBlcmNlcHR1YWwgYWJpbGl0aWVzIChlLmcuLCBfaGVhcl8sIF9zZWVfKS4gQW4gYW5hbHlzaXMgb2YgZmFjdG9yIGNvbmdydWVuY2UgaW5kaWNhdGVkIHRoYXQgdGhpcyBmYWN0b3Igd2FzIG1vc3Qgc2ltaWxhciB0byBhZHVsdHMnIEJPRFkgZmFjdG9yIChgciBjb25nX3JlcG9ydF9mdW4oZWZhX2FkID0gZWZhX3dkbV9kNF9hZCwgZWZhX2NoID0gZWZhX3dkbV9kNF80NiwgZmFjdG9yID0gIkYzIiwgZmFjdG9yX25hbWVzX2FkID0gZmFjdG9yX25hbWVzX2VmYV93ZG1fZDRfYWQpYCkuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2Q0XzQ2LCA0LCAiRjMiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfd2RtX2Q0XzQ2JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkYzIl0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCBmb3VyLWZhY3RvciBzb2x1dGlvbiwgYW5kIGByIHJvdW5kKGVmYV93ZG1fZDRfNDYkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBWYXIiLCAiRjMiXSwgMikgKiAxMDBgJSBvZiB0aGUgdG90YWwgdmFyaWFuY2UgaW4gcGFydGljaXBhbnRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLgoKVGhlIGZvdXJ0aCBmYWN0b3IgY29ycmVzcG9uZGVkIHByaW1hcmlseSB0byBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcywgcGFydGljdWxhcmx5IG5lZ2F0aXZlIGVtb3Rpb25zLiBBbiBhbmFseXNpcyBvZiBmYWN0b3IgY29uZ3J1ZW5jZSBpbmRpY2F0ZWQgdGhhdCB0aGlzIGZhY3RvciB3YXMgbW9zdCBzaW1pbGFyIHRvIGFkdWx0cycgSEVBUlQgZmFjdG9yIChgciBjb25nX3JlcG9ydF9mdW4oZWZhX2FkID0gZWZhX3dkbV9kNF9hZCwgZWZhX2NoID0gZWZhX3dkbV9kNF80NiwgZmFjdG9yID0gIkY0IiwgZmFjdG9yX25hbWVzX2FkID0gZmFjdG9yX25hbWVzX2VmYV93ZG1fZDRfYWQpYCkuIEl0IHdhcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBzdWNoIGl0ZW1zIGFzIGByIHRvcF9uX2RvbUNhcChlZmFfd2RtX2Q0XzQ2LCA0LCAiRjQiLCAicG9zIilgLCBhbmQgYWNjb3VudGVkIGZvciBgciByb3VuZChlZmFfd2RtX2Q0XzQ2JFZhY2NvdW50ZWRbIlByb3BvcnRpb24gRXhwbGFpbmVkIiwgIkY0Il0sIDIpICogMTAwYCUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZSBpbiB0aGUgcm90YXRlZCBmb3VyLWZhY3RvciBzb2x1dGlvbiwgYW5kIGByIHJvdW5kKGVmYV93ZG1fZDRfNDYkVmFjY291bnRlZFsiUHJvcG9ydGlvbiBWYXIiLCAiRjQiXSwgMikgKiAxMDBgJSBvZiB0aGUgdG90YWwgdmFyaWFuY2UgaW4gcGFydGljaXBhbnRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLgoKVG9nZXRoZXIsIHRoZXNlIHRocmVlIGZhY3RvcnMgYWNjb3VudGVkIGZvciBgciByb3VuZChzdW0oZWZhX3dkbV9kNF80NiRWYWNjb3VudGVkWyJQcm9wb3J0aW9uIFZhciIsIF0pLCAyKSAqIDEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBwYXJ0aWNpcGFudHMnIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMuCgpTZWUgRmlndXJlIDMuNCBmb3IgYWxsIGZhY3RvciBsb2FkaW5ncywgYW5kIFRhYmxlIDMuMiBmb3IgY29zaW5lIHNpbWlsYXJpdGllcyBiZXR3ZWVuIGNoaWxkIGFuZCBhZHVsdCBmYWN0b3JzLgoKSSB3b3VsZCBzdW1tYXJpemUgdGhlIGZvdXItZmFjdG9yIHNvbHV0aW9uIGFzIGEgdmFyaWFudCBvbiB0aGUgdGhyZWUtZmFjdG9yIHNvbHV0aW9ucyBjb21tb24gYW1vbmcgYWR1bHRzIGFuZCBvbGRlciBjaGlsZHJlbiBpbiBTdHVkaWVzIDEtMyAoYW5kIHN1cmZhY2VkIHRoZSB0aHJlZS1mYWN0b3Igc29sdXRpb24gZGlzY3Vzc2VkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uKS4gVGhpcyBzb2x1dGlvbiBpcyBjaGFyYWN0ZXJpemVkIGJ5IGRpc3RpbmN0IGNvbnN0cnVjdHMgb2YgSEVBUlQgYW5kIE1JTkQsIHN1Z2dlc3RzIGEgZnVydGhlciBkaWZmZXJlbnRpYXRpb24gb2Ygd2hhdCBJJ3ZlIHJlZmVycmVkIHRvIGFzIEJPRFkgaW50byBzdWItY2F0ZWdvcmllcyB0aGF0IGFyZSBub3QgZWFzeSB0byBsYWJlbCBvciBkZXNjcmliZS4KCl9fQ0hFQ0sgQkFDSyBXSVRIIE1PUkUgREFUQSFfXwoKYGBge3J9CnBsb3RfZWZhX3dkbV9kNF9hZCA8LSBoZWF0bWFwX2Z1bihlZmFfd2RtX2Q0X2FkLCBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kNF9hZCkgKwogIGxhYnModGl0bGUgPSAiQWR1bHRzIiwgc3VidGl0bGUgPSAiMy1mYWN0b3Igc29sdXRpb24iKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpwbG90X2VmYV9wYXJfZDRfNDYgPC0gaGVhdG1hcF9mdW4oZWZhX3Bhcl9kNF80NiwgZmFjdG9yX25hbWVzX2VmYV9wYXJfZDRfNDYpICsKICBsYWJzKHRpdGxlID0gIllvdW5nZXIgY2hpbGRyZW4sIDQtNXkiLCBzdWJ0aXRsZSA9ICIzLWZhY3RvciBzb2x1dGlvbiIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCnBsb3RfZWZhX3dkbV9kNF80NiA8LSBoZWF0bWFwX2Z1bihlZmFfd2RtX2Q0XzQ2LCBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kNF80NikgKwogIGxhYnModGl0bGUgPSAiWW91bmdlciBjaGlsZHJlbiwgNC01eSIsIHN1YnRpdGxlID0gIjQtZmFjdG9yIHNvbHV0aW9uIikKYGBgCgpgYGB7cn0KZmlndXJlMy40IDwtIHBsb3RfZ3JpZChwbG90X2VmYV93ZG1fZDRfYWQsIHBsb3RfZWZhX3Bhcl9kNF80NiwKICAgICAgICAgICAgICAgICAgICAgICBwbG90X2VmYV93ZG1fZDRfNDYsCiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gIkFVVE8iLCBuY29sID0gMywgcmVsX3dpZHRocyA9IGMoMSwgMSwgMS40KSkKCmZpZ3VyZTMuNF9jYXAgPC0gYWRkX3N1YihmaWd1cmUzLjQsIHN0cl93cmFwKCJGaWd1cmUgMy40OiBGYWN0b3IgbG9hZGluZ3MgZnJvbSBleHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzZXMgb2YgU3R1ZHkgNCwgaW4gd2hpY2ggcGFydGljaXBhbnRzIGFzc2Vzc2VkIHR3byAnZWRnZSBjYXNlJyB0YXJnZXQgY2hhcmFjdGVycyAoYSBiZWV0bGUgYW5kIGEgcm9ib3QpLCBvbmUgYWZ0ZXIgYW5vdGhlciAod2l0aCBvcmRlciBjb3VudGVyYmFsYW5jZWQgYWNyb3NzIHBhcnRpY2lwYW50cykuIChBKSBSZXN1bHRzIGZvciBVUyBhZHVsdHMuIChCKSBSZXN1bHRzIGZvciBVUyBjaGlsZHJlbiBhZ2VzIDQtNXksIHJldGFpbmluZyB0aHJlZSBmYWN0b3JzIChhcyBzdWdnZXN0ZWQgYnkgcGFyYWxsZWwgYW5hbHlzaXMpLiAoQykgUmVzdWx0cyBmb3IgVVMgY2hpbGRyZW4gYWdlcyA0LTV5LCByZXRhaW5pbmcgZm91ciBmYWN0b3JzIChhcyBzdWdnZXN0ZWQgYnkgdGhlIG9yaWdpbmFsIGZhY3RvciByZXRlbnRpb24gY3JpdGVyaWEgcmVwb3J0ZWQgaW4gV2Vpc21hbiBldCBhbC4sIDIwMTcpLiBJbiB0aGlzIGFuZCBhbGwgZmlndXJlcyBwb3J0cmF5aW5nIGZhY3RvciBsb2FkaW5ncywgZmFjdG9ycyBoYXZlIGJlZW4gcGxvdHRlZCBpbiB0aGUgc2FtZSBvcmRlciAoQk9EWSwgSEVBUlQsIE1JTkQpLCB3aGVuIGFwcGxpY2FibGUsIHRvIGZhY2lsaXRhdGUgY29tcGFyaXNvbiBhY3Jvc3Mgc3R1ZGllcy4gQSBmYWN0b3IgbG9hZGluZyBvZiArMSBpbmRpY2F0ZXMgYSBwZXJmZWN0bHkgcG9zaXRpdmUgcmVsYXRpb25zaGlwIGJldHdlZW4gbWVudGFsIGNhcGFjaXR5IGFuZCB1bmRlcmx5aW5nIGNvbnN0cnVjdDsgYSBsb2FkaW5nIG9mIC0xIGluZGljYXRlcyBhIHBlcmZlY3RseSBuZWdhdGl2ZSByZWxhdGlvbnNoaXAuIiwgMjEwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciBmaWd1cmUzLjQsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA5LCBmaWcuYXNwID0gMC42fQpnZ2RyYXcoZmlndXJlMy40X2NhcCkKYGBgCgpgYGB7cn0KY29uZ19yZXBvcnQgPC0gYmluZF9yb3dzKGNvbmdfZWZhX3dkbV9kMl9hZF83OSAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfcm93bmFtZXMoKSAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKG9yZGVyID0gMSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHVkeSA9ICJTdHVkeSAyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9ICI3LTl5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbHV0aW9uID0gIjMtZmFjdG9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoX2ZhY3RvciA9IGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QyXzc5KSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmdfZWZhX3dkbV9kM19hZF83OSAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfcm93bmFtZXMoKSAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKG9yZGVyID0gMiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHVkeSA9ICJTdHVkeSAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9ICI3LTl5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbHV0aW9uID0gIjMtZmFjdG9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoX2ZhY3RvciA9IGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QzXzc5KSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmdfZWZhX3dkbV9kM19hZF80NiAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfcm93bmFtZXMoKSAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKG9yZGVyID0gMywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHVkeSA9ICJTdHVkeSAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9ICI0LTZ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbHV0aW9uID0gIjMtZmFjdG9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoX2ZhY3RvciA9IGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QzXzQ2KSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmdfZWZhX3Bhcl9kM19hZF80NiAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfcm93bmFtZXMoKSAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKG9yZGVyID0gNCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHVkeSA9ICJTdHVkeSAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9ICI0LTZ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbHV0aW9uID0gIjItZmFjdG9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoX2ZhY3RvciA9IGZhY3Rvcl9uYW1lc19lZmFfcGFyX2QzXzQ2KSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmdfZWZhX3Bhcl9kNF9hZF80NiAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfcm93bmFtZXMoKSAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKG9yZGVyID0gNSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHVkeSA9ICJTdHVkeSA0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9ICI0LTV5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbHV0aW9uID0gIjMtZmFjdG9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoX2ZhY3RvciA9IGZhY3Rvcl9uYW1lc19lZmFfcGFyX2Q0XzQ2KSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmdfZWZhX3dkbV9kNF9hZF80NiAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfcm93bmFtZXMoKSAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKG9yZGVyID0gNiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHVkeSA9ICJTdHVkeSA0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9ICI0LTV5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbHV0aW9uID0gIjQtZmFjdG9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoX2ZhY3RvciA9IGZhY3Rvcl9uYW1lc19lZmFfd2RtX2Q0XzQ2KSkgJT4lCiAgYXJyYW5nZShvcmRlciwgY2hfZmFjdG9yKSAlPiUKICBzZWxlY3Qoc3R1ZHksIGFnZV9ncm91cCwgc29sdXRpb24sIGNoX2ZhY3RvciwgQk9EWSwgSEVBUlQsIE1JTkQpCmNvbmdfcmVwb3J0CmBgYAoKYGBge3J9CnRhYmxlMy4yIDwtIGNvbmdfcmVwb3J0ICU+JQogIHNlbGVjdCgtYyhzdHVkeSwgYWdlX2dyb3VwLCBzb2x1dGlvbikpICU+JQogIG11dGF0ZShjaF9mYWN0b3IgPSBnc3ViKCJGIiwgIkZhY3RvciAiLCBjaF9mYWN0b3IpKSAlPiUKICByZW5hbWUoI2BBZ2UgZ3JvdXBgID0gYWdlX2dyb3VwLAogICAgICAgICBgQ2hpbGRyZW4ncyBmYWN0b3JgID0gY2hfZmFjdG9yKSAlPiUKICBtdXRhdGVfYXQodmFycyhCT0RZLCBIRUFSVCwgTUlORCksCiAgICAgICAgICAgIGZ1bnMoZm9ybWF0KC4sIG5zbWFsbCA9IDIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoQk9EWSwgSEVBUlQsIE1JTkQpLAogICAgICAgICAgICBmdW5zKGNlbGxfc3BlYyguLCAiaHRtbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICBib2xkID0gaWZlbHNlKGFicyhhcy5udW1lcmljKC4pKSA+PSAwLjc1LCBULCBGKSkpKSAlPiUKICBrYWJsZShmb3JtYXQgPSAiaHRtbCIsIGVzY2FwZSA9IEYsIAogICAgICAgIGFsaWduID0gYygibCIsIHJlcCgiciIsIDMpKSwKICAgICAgICBjYXB0aW9uID0gIlRhYmxlIDMuMjogRmFjdG9yIGNvbmdydWVuY2UgKGFzIGluZGV4ZWQgYnkgY29zaW5lIHNpbWlsYXJpdHkpIGJldHdlZW4gY2hpbGRyZW4ncyBhbmQgYWR1bHRzJyBmYWN0b3JzIGZyb20gdGhlIHRocmVlLWZhY3RvciBzb2x1dGlvbiBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgc3R1ZHkgKEJPRFksIEhFQVJULCBhbmQgTUlORCBjb2x1bW5zKS4gUmVzdWx0cyBhcmUgZ3JvdXBlZCBieSBzdHVkeSBhbmQgYWdlIGdyb3VwLiBJbiBwcmluY2lwbGUsIGNvc2luZSBzaW1pbGFyaXRpZXMgY291bGQgcmFuZ2UgZnJvbSAtMSAod2hpY2ggd291bGQgaW5kaWNhdGUgdGhhdCB0d28gZmFjdG9ycyBhcmUgcGVyZmVjdCBvcHBvc2l0ZXMgb2YgZWFjaCBvdGhlcikgdG8gKzEgKHdoaWNoIHdvdWxkIGluZGljYXRlIHRoYXQgdHdvIGZhY3RvcnMgYXJlIHBlcmZlY3RseSBpZGVudGljYWwgdG8gZWFjaCBvdGhlcikuIENvc2luZSBzaW1pbGFyaXRpZXMgd2l0aCBhYnNvbHV0ZSB2YWx1ZXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAuNzUgYXJlIG1hcmtlZCBpbiBib2xkLiIpICU+JSAgCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlN0dWR5IDIsIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4iLCAxLCAzKSAlPiUKICBncm91cF9yb3dzKCJTdHVkeSAzLCA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIiwgNCwgNikgJT4lCiAgZ3JvdXBfcm93cygiU3R1ZHkgMywgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiAoMy1mYWN0b3Igc29sdXRpb24pIiwgNywgOSkgJT4lCiAgZ3JvdXBfcm93cygiU3R1ZHkgMywgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiAoMi1mYWN0b3Igc29sdXRpb24pIiwgMTAsIDExKSAlPiUKICBncm91cF9yb3dzKCJTdHVkeSA0LCA0LSB0byA1LXllYXItb2xkIGNoaWxkcmVuICgzLWZhY3RvciBzb2x1dGlvbikiLCAxMiwgMTQpICU+JQogIGdyb3VwX3Jvd3MoIlN0dWR5IDQsIDQtIHRvIDUteWVhci1vbGQgY2hpbGRyZW4gKDQtZmFjdG9yIHNvbHV0aW9uKSIsIDE1LCAxOCkKICAKICAjIGNvbGxhcHNlX3Jvd3MoY29sdW1ucyA9IDE6MiwgdmFsaWduID0gInRvcCIpICU+JQogICAgICAgICAgICAgICAgIyBsYXRleF9obGluZSA9ICJjdXN0b20iLCBjdXN0b21fbGF0ZXhfaGxpbmUgPSAxKQpgYGAKCmBgYHtyIHRhYmxlMy4yLCBpbmNsdWRlID0gVCwgcmVzdWx0cyA9ICJhc2lzIn0KdGFibGUzLjIKYGBgCgojIyBEaXNjdXNzaW9uCgpVc2luZyBhIHBhcmFkaWdtIHRoYXQgd2FzIGJldHRlciB0YWlsb3JlZCBmb3IgeW91bmcgY2hpbGRyZW4gYW5kIHRoYXQgZmVhdHVyZWQgdm9jYWJ1bGFyeSBpdGVtcyBleHByZXNzbHkgZGVzaWduZWQgdG8gcGljayBvdXQgKGFkdWx0KSBub3Rpb25zIG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCBpbiBhIGJhbGFuY2VkIHdheSAoNiBpdGVtcyBwZXIgZmFjdG9yKSwgU3R1ZHkgNCBwcm92aWRlZCBzb21lIGluZGljYXRpb25zIHRoYXQgdGhlIGNvbmNlcHR1YWwgdW5pdHMgYXZhaWxhYmxlIHRvIHlvdW5nIGNoaWxkcmVuIG1heSBiZSBtb3JlICJhZHVsdC1saWtlIiB0aGFuIFN0dWR5IDMgd291bGQgc3VnZ2VzdC4gSG93ZXZlciwgZXZlbiBpbiB0aGlzIG1vZGlmaWVkIHBhcmFkaWdtLCB0aGVyZSBhcmUgc2V2ZXJhbCBpbmRpY2F0aW9ucyB0aGF0IHRoaXMgdGhyZWUtcGFydCBjb25jZXB0dWFsIHN0cnVjdHVyZSBpcyBub3QgZnVsbHkgbWF0dXJlIGJ5IHRoZSBhZ2Ugb2YgNC01eS4KCmBgYHtyfQplZmFfcGFyX2Q0XzQ2X21vZGxvYWQgPC0gbG9hZGluZ3NfZnVuKGVmYV9wYXJfZDRfNDYsICJsb25nIikgJT4lIAogIGZpbHRlcihsb2FkaW5nID49IDAuNDApICU+JQogIGFycmFuZ2UoZmFjdG9yLCBkZXNjKGxvYWRpbmcpKSAlPiUKICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgbXV0YXRlKGFkdWx0X2ZhY3RvciA9IGNhc2Vfd2hlbigKICAgIGdyZXBsKGNhcGFjaXR5LCAKICAgICAgICAgIHRvcF9uX2RvbUNhcChlZmFfcGFyX2Q0X2FkLCAxOCwgIkYxIiwgInBvcyIpKSA9PSBUIH4gIkJPRFkiLAogICAgZ3JlcGwoY2FwYWNpdHksIAogICAgICAgICAgdG9wX25fZG9tQ2FwKGVmYV9wYXJfZDRfYWQsIDE4LCAiRjIiLCAicG9zIikpID09IFQgfiAiSEVBUlQiLAogICAgZ3JlcGwoY2FwYWNpdHksIAogICAgICAgICAgdG9wX25fZG9tQ2FwKGVmYV9wYXJfZDRfYWQsIDE4LCAiRjMiLCAicG9zIikpID09IFQgfiAiTUlORCIsCiAgICBUUlVFIH4gIm5vIGRvbWluYW50IGZhY3RvciIpKSAlPiUKICB1bmdyb3VwKCkKZWZhX3Bhcl9kNF80Nl9tb2Rsb2FkCmBgYAoKYGBge3J9CmVmYV9wYXJfZDRfNDZfbG93bG9hZCA8LSBsb2FkaW5nc19mdW4oZWZhX3Bhcl9kNF80NiwgImxvbmciKSAlPiUgCiAgZmlsdGVyKGxvYWRpbmcgPCAwLjMwKSAlPiUKICBhcnJhbmdlKGZhY3RvciwgZGVzYyhsb2FkaW5nKSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIG11dGF0ZShhZHVsdF9mYWN0b3IgPSBjYXNlX3doZW4oCiAgICBncmVwbChjYXBhY2l0eSwgCiAgICAgICAgICB0b3Bfbl9kb21DYXAoZWZhX3Bhcl9kNF9hZCwgMTgsICJGMSIsICJwb3MiKSkgPT0gVCB+ICJCT0RZIiwKICAgIGdyZXBsKGNhcGFjaXR5LCAKICAgICAgICAgIHRvcF9uX2RvbUNhcChlZmFfcGFyX2Q0X2FkLCAxOCwgIkYyIiwgInBvcyIpKSA9PSBUIH4gIkhFQVJUIiwKICAgIGdyZXBsKGNhcGFjaXR5LCAKICAgICAgICAgIHRvcF9uX2RvbUNhcChlZmFfcGFyX2Q0X2FkLCAxOCwgIkYzIiwgInBvcyIpKSA9PSBUIH4gIk1JTkQiLAogICAgVFJVRSB+ICJubyBkb21pbmFudCBmYWN0b3IiKSkgJT4lCiAgdW5ncm91cCgpCmVmYV9wYXJfZDRfNDZfbG93bG9hZApgYGAKCmBgYHtyfQplZmFfcGFyX2Q0XzQ2X2RvbUNhcCA8LSBsb2FkaW5nc19mdW4oZWZhX3Bhcl9kNF80NiwgImxvbmciKSAlPiUgCiAgYXJyYW5nZShkZXNjKGxvYWRpbmcpKSAlPiUKICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgdG9wX24oMSwgbG9hZGluZykgJT4lCiAgbXV0YXRlKGFkdWx0X2ZhY3RvciA9IGNhc2Vfd2hlbigKICAgIGdyZXBsKGNhcGFjaXR5LCAKICAgICAgICAgIHRvcF9uX2RvbUNhcChlZmFfcGFyX2Q0X2FkLCAxOCwgIkYxIiwgInBvcyIpKSA9PSBUIH4gIkJPRFkiLAogICAgZ3JlcGwoY2FwYWNpdHksIAogICAgICAgICAgdG9wX25fZG9tQ2FwKGVmYV9wYXJfZDRfYWQsIDE4LCAiRjIiLCAicG9zIikpID09IFQgfiAiSEVBUlQiLAogICAgZ3JlcGwoY2FwYWNpdHksIAogICAgICAgICAgdG9wX25fZG9tQ2FwKGVmYV9wYXJfZDRfYWQsIDE4LCAiRjMiLCAicG9zIikpID09IFQgfiAiTUlORCIsCiAgICBUUlVFIH4gIm5vIGRvbWluYW50IGZhY3RvciIpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgYXJyYW5nZShmYWN0b3IsIGRlc2MobG9hZGluZykpCmVmYV9wYXJfZDRfNDZfZG9tQ2FwCmBgYAoKYGBge3J9CmVmYV93ZG1fZDRfNDZfbW9kbG9hZCA8LSBsb2FkaW5nc19mdW4oZWZhX3dkbV9kNF80NiwgImxvbmciKSAlPiUgCiAgZmlsdGVyKGxvYWRpbmcgPj0gMC40MCkgJT4lCiAgYXJyYW5nZShmYWN0b3IsIGRlc2MobG9hZGluZykpICU+JQogIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUKICBtdXRhdGUoYWR1bHRfZmFjdG9yID0gY2FzZV93aGVuKAogICAgZ3JlcGwoY2FwYWNpdHksIAogICAgICAgICAgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDRfYWQsIDE4LCAiRjEiLCAicG9zIikpID09IFQgfiAiQk9EWSIsCiAgICBncmVwbChjYXBhY2l0eSwgCiAgICAgICAgICB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kNF9hZCwgMTgsICJGMiIsICJwb3MiKSkgPT0gVCB+ICJIRUFSVCIsCiAgICBncmVwbChjYXBhY2l0eSwgCiAgICAgICAgICB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kNF9hZCwgMTgsICJGMyIsICJwb3MiKSkgPT0gVCB+ICJNSU5EIiwKICAgIFRSVUUgfiAibm8gZG9taW5hbnQgZmFjdG9yIikpICU+JQogIHVuZ3JvdXAoKQplZmFfd2RtX2Q0XzQ2X21vZGxvYWQKYGBgCgpgYGB7cn0KZWZhX3dkbV9kNF80Nl9sb3dsb2FkIDwtIGxvYWRpbmdzX2Z1bihlZmFfd2RtX2Q0XzQ2LCAibG9uZyIpICU+JSAKICBmaWx0ZXIobG9hZGluZyA8IDAuMzApICU+JQogIGFycmFuZ2UoZmFjdG9yLCBkZXNjKGxvYWRpbmcpKSAlPiUKICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgbXV0YXRlKGFkdWx0X2ZhY3RvciA9IGNhc2Vfd2hlbigKICAgIGdyZXBsKGNhcGFjaXR5LCAKICAgICAgICAgIHRvcF9uX2RvbUNhcChlZmFfd2RtX2Q0X2FkLCAxOCwgIkYxIiwgInBvcyIpKSA9PSBUIH4gIkJPRFkiLAogICAgZ3JlcGwoY2FwYWNpdHksIAogICAgICAgICAgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDRfYWQsIDE4LCAiRjIiLCAicG9zIikpID09IFQgfiAiSEVBUlQiLAogICAgZ3JlcGwoY2FwYWNpdHksIAogICAgICAgICAgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDRfYWQsIDE4LCAiRjMiLCAicG9zIikpID09IFQgfiAiTUlORCIsCiAgICBUUlVFIH4gIm5vIGRvbWluYW50IGZhY3RvciIpKSAlPiUKICB1bmdyb3VwKCkKZWZhX3dkbV9kNF80Nl9sb3dsb2FkCmBgYAoKYGBge3J9CmVmYV93ZG1fZDRfNDZfZG9tQ2FwIDwtIGxvYWRpbmdzX2Z1bihlZmFfd2RtX2Q0XzQ2LCAibG9uZyIpICU+JSAKICBhcnJhbmdlKGRlc2MobG9hZGluZykpICU+JQogIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUKICB0b3BfbigxLCBsb2FkaW5nKSAlPiUKICBtdXRhdGUoYWR1bHRfZmFjdG9yID0gY2FzZV93aGVuKAogICAgZ3JlcGwoY2FwYWNpdHksIAogICAgICAgICAgdG9wX25fZG9tQ2FwKGVmYV93ZG1fZDRfYWQsIDE4LCAiRjEiLCAicG9zIikpID09IFQgfiAiQk9EWSIsCiAgICBncmVwbChjYXBhY2l0eSwgCiAgICAgICAgICB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kNF9hZCwgMTgsICJGMiIsICJwb3MiKSkgPT0gVCB+ICJIRUFSVCIsCiAgICBncmVwbChjYXBhY2l0eSwgCiAgICAgICAgICB0b3Bfbl9kb21DYXAoZWZhX3dkbV9kNF9hZCwgMTgsICJGMyIsICJwb3MiKSkgPT0gVCB+ICJNSU5EIiwKICAgIFRSVUUgfiAibm8gZG9taW5hbnQgZmFjdG9yIikpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBhcnJhbmdlKGZhY3RvciwgZGVzYyhsb2FkaW5nKSkKZWZhX3dkbV9kNF80Nl9kb21DYXAKYGBgCgpGaXJzdCwgdGhlIHNpbWlsYXJpdGllcy4gQXMgd2l0aCB0aGUgeW91bmdlciAoNC0gdG8gNi15ZWFyLW9sZCkgY2hpbGRyZW4gaW4gU3R1ZHkgMywgNC0gdG8gNS15ZWFyLW9sZCBjaGlsZHJlbuKAmXMgcmVzcG9uc2VzIGluIFN0dWR5IDQgd2VyZSBjaGFyYWN0ZXJpemVkIGJ5IHN0cm9uZyBjb3JyZWxhdGlvbnMgYW1vbmcgYSBzdWl0ZSBvZiBwZXJjZXB0dWFsIGFuZCBjb2duaXRpdmUgY2FwYWNpdGllcyB0aGF0IEkgaGF2ZSBiZWVuIHJlZmVycmluZyB0byBhcyBNSU5ELiBUaGlzIHN1aXRlIG9mIE1JTkQgYWJpbGl0aWVzIHdhcyByZWxhdGl2ZWx5IHJvYnVzdCB0byBhbmFseXNpcyBjaG9pY2VzIGFuZCBlbWVyZ2VkIGNsZWFybHkgaW4gYm90aCBTdHVkaWVzIDIgYW5kIDMsIGJvbHN0ZXJpbmcgbXkgZWFybGllciBjbGFpbSB0aGF0IHRoaXMgaXMgb25lIGFzcGVjdCBvZiBjb25jZXB0dWFsIHN0cnVjdHVyZSB0aGF0IG1heSBiZSByZWxhdGl2ZWx5IHN0YWJsZSBmcm9tIGVhcmx5IGluIGNoaWxkaG9vZC4gCgpTdHVkeSA0IHN1Z2dlc3RzIHRoYXQgdGhlc2Ugc2ltaWxhcml0aWVzIG1heSBleHRlbmQgZXZlbiBmdXJ0aGVyLiBUaGUgdGhyZWUtZmFjdG9yIHNvbHV0aW9uIHN1Z2dlc3RlZCBieSBwYXJhbGxlbCBhbmFseXNpcyBpbmNsdWRlcyByZWNvZ25pemFibGUgQk9EWSBhbmQgTUlORCBmYWN0b3JzIGFzIHdlbGwgYXMgYSBuYXNjZW50IEhFQVJUXCogZmFjdG9yLCBvbiB3aGljaCBoYWxmIG9mIHRoZSBtZW50YWwgY2FwYWNpdGllcyB0aGF0IHdlcmUgZGVzaWduYXRlZCBhcyBIRUFSVCBpdGVtcyBhIHByaW9yaSBsb2FkZWQgbW9kZXJhdGVseSBzdHJvbmdseSAobG9hZGluZ3MgJFxnZXEkIDAuNDA6IGByIGl0YWxfYnlfY2FwX2Z1bihlZmFfcGFyX2Q0XzQ2X21vZGxvYWQkY2FwYWNpdHlbZWZhX3Bhcl9kNF80Nl9tb2Rsb2FkJGFkdWx0X2ZhY3RvciA9PSAiSEVBUlQiICYgZWZhX3Bhcl9kNF80Nl9tb2Rsb2FkJGZhY3RvciA9PSAiRjMiXSlgKS4gKFRoZSBmb3VyLWZhY3RvciBzb2x1dGlvbiBpbmNsdWRlcyBhIHZlcnkgc2ltaWxhciBIRUFSVC1saWtlIGZhY3Rvcjsgc2VlIEZpZ3VyZSAzLjQuKSBUaGlzIGlzIGEgc3Vic3RhbnRpYWxseSBtb3JlIGFkdWx0LWxpa2UgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgdGhhbiB3YXMgb2JzZXJ2ZWQgYW1vbmcgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSAzLgoKSG93ZXZlciwgYXMgaW4gU3R1ZHkgMywgdGhlIHZlcnkgZmFjdCB0aGF0IGRpZmZlcmVudCBhcHByb2FjaGVzIHRvIGZhY3RvciByZXRlbnRpb24geWllbGRlZCBkaWZmZXJlbnQgcmVzdWx0cyBpcyBmdXJ0aGVyIGV2aWRlbmNlIHRoYXQgdGhpcyBCT0RZLUhFQVJULU1JTkQgZnJhbWV3b3JrIGlzIG5vdCBleGFjdGx5ICJyb2J1c3QiIGFtb25nIHByZXNjaG9vbC1hZ2UgY2hpbGRyZW4uIAoKQ29uc2lkZXIgZmlyc3QgeW91bmcgY2hpbGRyZW4ncyB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyB0aGF0IHdlIGRlc2lnbmF0ZWQgYXMgcmVwcmVzZW50YXRpdmUgb2YgSEVBUlQuIEluIFN0dWR5IDMsIHRoZSBzb2NpYWwtZW1vdGlvbmFsIGRvbWFpbiBhcHBlYXJlZCB0byBiZSB0aGUgc2l0ZSBvZiB0aGUgbW9zdCBzdHJpa2luZyBkaWZmZXJlbmNlcyBiZXR3ZWVuIDQtIHRvIDYteWVhci1vbGQgY2hpbGRyZW4sIG9uIHRoZSBvbmUgaGFuZCwgYW5kIG9sZGVyIGNoaWxkcmVuIGFuZCBhZHVsdHMgb24gdGhlIG90aGVyLiBFRkFzIG9mIDQtIHRvIDUteWVhci1vbGQgY2hpbGRyZW7igJlzIHJlc3BvbnNlcyBpbiBTdHVkeSA0IG9mZmVyIGNvbnZlcmdlbnQgZXZpZGVuY2UgdGhhdCB5b3VuZyBjaGlsZHJlbiBtYXkgbm90IGNvbnNpZGVyIHRoZSBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyB0aGF0IGNvbnN0aXR1dGUgd2hhdCBJIGhhdmUgY2FsbGVkIEhFQVJUIGFtb25nIGFkdWx0cyB0byBoYW5nIHRvZ2V0aGVyIGFzIG9uZSBjbGVhcmx5IGRpc3RpbmN0IGNvbXBvbmVudCBvZiBtZW50YWwgbGlmZS4gRXZlbiBpbiB0aGUgbW9yZSBhZHVsdC1saWtlLCB0aHJlZS1mYWN0b3Igc29sdXRpb24gc3VnZ2VzdGVkIGJ5IHBhcmFsbGVsIGFuYWx5c2lzLCB0d28gb2YgdGhlIHNpeCBkZXNpZ25hdGVkIEhFQVJUIGl0ZW1zIGRpZCBfbm90XyBsb2FkIHN0cm9uZ2x5IG9uIHRoZSBvc3RlbnNpdmUgSEVBUlRcKiBmYWN0b3IgKGxvYWRpbmdzICRcbGVxJCAwLjMwOiBgciBpdGFsX2J5X2NhcF9mdW4oZWZhX3Bhcl9kNF80Nl9sb3dsb2FkJGNhcGFjaXR5W2VmYV9wYXJfZDRfNDZfbG93bG9hZCRhZHVsdF9mYWN0b3IgPT0gIkhFQVJUIiAmIGVmYV9wYXJfZDRfNDZfbG93bG9hZCRmYWN0b3IgPT0gIkYzIl0pYCk7IGluZGVlZCwgdGhlIGRvbWluYW50IGZhY3RvciBmb3IgdGhlc2UgdHdvIGl0ZW1zIHdhcyBNSU5EXCosIG5vdCBIRUFSVFwqLiAoVGhlc2Ugb2JzZXJ2YXRpb25zIGFsc28gaG9sZCBpbiB0aGUgZm91ci1mYWN0b3Igc29sdXRpb24gc3VnZ2VzdGVkIGJ5IFdlaXNtYW4gZXQgYWwuJ3MgKDIwMTcpIG9yaWdpbmFsIGZhY3RvciByZXRlbnRpb24gcHJvdG9jb2w7IGluIGZhY3QsIGluIHRoaXMgc29sdXRpb24sIE1JTkRcKiB3YXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3IgdGhyZWUgb2YgdGhlIHNpeCBkZXNpZ25hdGVkIEhFQVJUIGl0ZW1zLikgQXMgYSBwb2ludCBvZiBjb21wYXJpc29uLCBhbW9uZyBhZHVsdHMgaW4gU3R1ZHkgNCBhbGwgc2l4IG9mIHRoZSBkZXNpZ25hdGVkIEhFQVJUIGl0ZW1zIGxvYWRlZCBtb3N0IHN0cm9uZ2x5IG9uIHRoZSBIRUFSVCBmYWN0b3IsIHN1Z2dlc3RpbmcgdGhlc2UgZGl2ZXJnZW50IHBhdHRlcm5zIGFyZSBub3QgZHVlIG1lcmVseSB0byB0aGUgdXNlIG9mIGEgbmV3IHNldCBvZiBtZW50YWwgY2FwYWNpdHkgdGVybXMuCgpJbiBhZGRpdGlvbiwgU3R1ZHkgNCBwcm92aWRlcyBuZXcgZXZpZGVuY2UgdGhhdCB5b3VuZyBjaGlsZHJlbidzIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRvbWFpbiBvZiBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgKEJPRFkpIG1heSBhbHNvIGRpdmVyZ2UgZnJvbSB0aGF0IG9mIGFkdWx0cy4gSW4gdGhlIG1vcmUgYWR1bHQtbGlrZSB0aHJlZS1mYWN0b3Igc29sdXRpb24sIHRoZSBmYWN0b3IgdGhhdCBJIGhhdmUgbGFiZWxlZCBCT0RZXCogZWxpY2l0ZWQgc3Ryb25nIGZhY3RvciBsb2FkaW5ncyAobG9hZGluZ3MgJFxnZXEkIDAuNDApIGZyb20gb25lIGRlc2lnbmF0ZWQgSEVBUlQgaXRlbSAoYHIgaXRhbF9ieV9jYXBfZnVuKGVmYV9wYXJfZDRfNDZfbW9kbG9hZCRjYXBhY2l0eVtlZmFfcGFyX2Q0XzQ2X21vZGxvYWQkYWR1bHRfZmFjdG9yID09ICJIRUFSVCIgJiBlZmFfcGFyX2Q0XzQ2X21vZGxvYWQkZmFjdG9yID09ICJGMSJdKWApIGFuZCBvbmUgZGVzaWduYXRlZCBNSU5EIGl0ZW0gKGByIGl0YWxfYnlfY2FwX2Z1bihlZmFfcGFyX2Q0XzQ2X21vZGxvYWQkY2FwYWNpdHlbZWZhX3Bhcl9kNF80Nl9tb2Rsb2FkJGFkdWx0X2ZhY3RvciA9PSAiTUlORCIgJiBlZmFfcGFyX2Q0XzQ2X21vZGxvYWQkZmFjdG9yID09ICJGMSJdKWApLCBpbiBhZGRpdGlvbiB0byB0aGUgc2l4IGNhbm9uaWNhbCBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgdGhhdCB3ZXJlIGRlc2lnbmF0ZWQgYXMgQk9EWSBpdGVtcyBhIHByaW9yaS4gTW9yZW92ZXIsIGluIHRoZSBmb3VyLWZhY3RvciBzb2x1dGlvbiBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgYWN0dWFsbHkgZGlmZmVyZW50aWF0ZWQgaW50byB0d28gZGlzdGluY3QgZmFjdG9ycyAodGhvdWdoIG5vdCBvbiBhbnkgZWFzaWx5IGludGVycHJldGFibGUgbGluZSwgaW4gbXkgdmlldykuIEFnYWluLCBhbW9uZyBhZHVsdHMgaW4gU3R1ZHkgNCBhbGwgc2l4IG9mIHRoZSBkZXNpZ25hdGVkIEJPRFkgaXRlbXMgbG9hZGVkIG1vc3Qgc3Ryb25nbHkgb24gdGhlIEJPRFkgZmFjdG9yLCBzdWdnZXN0aW5nIHRoZXNlIGRpdmVyZ2VudCBwYXR0ZXJucyBhcmUgbm90IGR1ZSBtZXJlbHkgdG8gdGhlIHVzZSBvZiBhIG5ldyBzZXQgb2YgbWVudGFsIGNhcGFjaXR5IHRlcm1zLiBJbnN0ZWFkLCB0aGVzZSByZXN1bHRzIHN1Z2dlc3QgdGhhdCB0aGUgY29uY2VwdHVhbCB1bml0IHRoYXQgSSBoYXZlIGNhbGxlZCBCT0RZIG1heSBub3QgYmUgYXMgcm9idXN0LCBkaXN0aW5jdCwgYW5kIHVuaWZpZWQgYW1vbmcgeW91bmcgY2hpbGRyZW4gYXMgaXQgYXBwZWFycyB0byBiZSBhbW9uZyBhZHVsdHMuCgoKIyBDb21wYXJpbmcgdGhlICJzaXplIiBvZiBjb25jZXB0dWFsIHVuaXRzIGFjcm9zcyBTdHVkaWVzIDEtNAoKSW4gdGhlIHByZXZpb3VzIHNlY3Rpb25zIGluIHRoaXMgY2hhcHRlciwgSSBkZXNjcmliZWQgRUZBIHJlc3VsdHMgZm9yIFN0dWRpZXMgMS00IGFuZCBvZmZlcmVkIGJvdGggcXVhbGl0YXRpdmUgY29tcGFyaXNvbnMgb2YgdGhlICJtZWFuaW5nIiBvZiB0aGUgY29uY2VwdHVhbCB1bml0cyByZXZlYWxlZCBieSB0aGVzZSBhbmFseXNlcyBhbmQgcXVhbnRpdGF0aXZlIGFzc2Vzc21lbnRzIG9mIHRoZSBzaW1pbGFyaXR5IG9mIGNvbmNlcHR1YWwgdW5pdHMgYWNyb3NzIGRpZmZlcmVudCBhZ2UgZ3JvdXBzIHdpdGhpbiBlYWNoIHN0dWR5IChzZWUgVGFibGUgMy4yKS4gSW4gdGhpcyBmaW5hbCBzZWN0aW9uLCBJIGV4cGxvcmUgb25lIGFkZGl0aW9uYWwgYXNwZWN0IG9mIHRoZXNlIGFuYWx5c2VzOiB0aGUgInNpemUiIG9mIHRoZSBjb25jZXB0dWFsIHVuaXRzIGlkZW50aWZpZWQgaW4gZWFjaCBzYW1wbGUuIAoKRm9yIGVhY2ggb2YgdGhlIEVGQSBzb2x1dGlvbnMgcmVwb3J0ZWQgZWFybGllciBpbiB0aGlzIGNoYXB0ZXIsIEkgaW5jbHVkZWQgYnV0IGRpZCBub3QgZGlzY3VzcyB0aHJlZSBhZGRpdGlvbmFsIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc29sdXRpb246IChhKSB0aGUgX3RvdGFsIHZhcmlhbmNlXyBpbiBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zIGV4cGxhaW5lZCBieSB0aGUgZmFjdG9ycyBpbiBjb21iaW5hdGlvbjsgKGIpIHRoZSBfcHJvcG9ydGlvbiBvZiB0b3RhbCB2YXJpYW5jZV8gZXhwbGFpbmVkIGJ5IGVhY2ggZmFjdG9yLCBhbmQgKGMpIHRoZSBwcm9wb3J0aW9uIG9mIHRoZSBfc2hhcmVkIHZhcmlhbmNlIGV4cGxhaW5lZF8gYnkgZWFjaCBmYWN0b3IuIEhlcmUgSSByZWZsZWN0IG9uIHdoYXQgdGhlc2UgbWV0cmljcyBtaWdodCByZXZlYWwgYWJvdXQgdGhlIHNldHMgb2YgY29uY2VwdHVhbCB1bml0cyByZXZlYWxlZCBieSBFRkEgYW5kIGNvbXBhcmUgdGhlICJzaXplIiBvZiB0aGVzZSBjb25jZXB0dWFsIHVuaXRzIGFjcm9zcyBzdHVkaWVzIGFuZCBhZ2UgZ3JvdXBzLiAKCmBgYHtyfQp2YXJfdG90YWxfcmVwb3J0IDwtIGJpbmRfcm93cygKICAjIHN0dWR5IDEKICB2YWNfZnVuKGVmYV93ZG1fZDFhX2FkLCBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWFfYWQsIAogICAgICAgICAgd2hpY2hfc3RhdCA9ICJQcm9wb3J0aW9uIFZhciIpICU+JQogICAgbXV0YXRlKG9yZGVyID0gMSwgc3R1ZHkgPSAiU3R1ZHkgMWEiLAogICAgICAgICAgIHNhbXBsZSA9ICIxYSIsIHNvbHV0aW9uID0gIjMtZmFjdG9yIiksCiAgdmFjX2Z1bihlZmFfd2RtX2QxYl9hZCwgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDFiX2FkLCAKICAgICAgICAgIHdoaWNoX3N0YXQgPSAiUHJvcG9ydGlvbiBWYXIiKSAlPiUKICAgIG11dGF0ZShvcmRlciA9IDEsIHN0dWR5ID0gIlN0dWR5IDFiIiwKICAgICAgICAgICBzYW1wbGUgPSAiMWIiLCBzb2x1dGlvbiA9ICIzLWZhY3RvciIpLAogIHZhY19mdW4oZWZhX3dkbV9kMWNfYWQsIGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxY19hZCwgCiAgICAgICAgICB3aGljaF9zdGF0ID0gIlByb3BvcnRpb24gVmFyIikgJT4lCiAgICBtdXRhdGUob3JkZXIgPSAxLCBzdHVkeSA9ICJTdHVkeSAxYyIsCiAgICAgICAgICAgc2FtcGxlID0gIjFjIiwgc29sdXRpb24gPSAiMy1mYWN0b3IiKSwKICB2YWNfZnVuKGVmYV93ZG1fZDFkX2FkLCBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWRfYWQsIAogICAgICAgICAgd2hpY2hfc3RhdCA9ICJQcm9wb3J0aW9uIFZhciIpICU+JQogICAgbXV0YXRlKG9yZGVyID0gMSwgc3R1ZHkgPSAiU3R1ZHkgMWQiLAogICAgICAgICAgIHNhbXBsZSA9ICIxZCIsIHNvbHV0aW9uID0gIjMtZmFjdG9yIiksCiAgIyBzdHVkeSAyCiAgdmFjX2Z1bihlZmFfd2RtX2QyX2FkLCBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMl9hZCwgCiAgICAgICAgICB3aGljaF9zdGF0ID0gIlByb3BvcnRpb24gVmFyIikgJT4lCiAgICBtdXRhdGUob3JkZXIgPSAxLCBzdHVkeSA9ICJTdHVkeSAyIiwKICAgICAgICAgICBzYW1wbGUgPSAiYWR1bHRzIiwgc29sdXRpb24gPSAiMy1mYWN0b3IiKSwKICB2YWNfZnVuKGVmYV9wYXJfZDJfYWQsIGZhY3Rvcl9uYW1lc19lZmFfcGFyX2QyX2FkLCAKICAgICAgICAgIHdoaWNoX3N0YXQgPSAiUHJvcG9ydGlvbiBWYXIiKSAlPiUKICAgIG11dGF0ZShvcmRlciA9IDIsIHN0dWR5ID0gIlN0dWR5IDIiLAogICAgICAgICAgIHNhbXBsZSA9ICJhZHVsdHMiLCBzb2x1dGlvbiA9ICI0LWZhY3RvciIpLAogIHZhY19mdW4oZWZhX3dkbV9kMl83OSwgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDJfNzksIAogICAgICAgICAgd2hpY2hfc3RhdCA9ICJQcm9wb3J0aW9uIFZhciIpICU+JQogICAgbXV0YXRlKG9yZGVyID0gMywgc3R1ZHkgPSAiU3R1ZHkgMiIsCiAgICAgICAgICAgc2FtcGxlID0gIjctOXkiLCBzb2x1dGlvbiA9ICIzLWZhY3RvciIpLAogICMgc3R1ZHkgMwogIHZhY19mdW4oZWZhX3dkbV9kM19hZCwgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfYWQsIAogICAgICAgICAgd2hpY2hfc3RhdCA9ICJQcm9wb3J0aW9uIFZhciIpICU+JQogICAgbXV0YXRlKG9yZGVyID0gMSwgc3R1ZHkgPSAiU3R1ZHkgMyIsCiAgICAgICAgICAgc2FtcGxlID0gImFkdWx0cyIsIHNvbHV0aW9uID0gIjMtZmFjdG9yIiksCiAgdmFjX2Z1bihlZmFfd2RtX2QzXzc5LCBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kM183OSwgCiAgICAgICAgICB3aGljaF9zdGF0ID0gIlByb3BvcnRpb24gVmFyIikgJT4lCiAgICBtdXRhdGUob3JkZXIgPSAzLCBzdHVkeSA9ICJTdHVkeSAzIiwKICAgICAgICAgICBzYW1wbGUgPSAiNy05eSIsIHNvbHV0aW9uID0gIjMtZmFjdG9yIiksCiAgdmFjX2Z1bihlZmFfd2RtX2QzXzQ2LCBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kM180NiwgCiAgICAgICAgICB3aGljaF9zdGF0ID0gIlByb3BvcnRpb24gVmFyIikgJT4lCiAgICBtdXRhdGUob3JkZXIgPSA1LCBzdHVkeSA9ICJTdHVkeSAzIiwKICAgICAgICAgICBzYW1wbGUgPSAiNC02eSIsIHNvbHV0aW9uID0gIjMtZmFjdG9yIiksCiAgdmFjX2Z1bihlZmFfcGFyX2QzXzQ2LCBmYWN0b3JfbmFtZXNfZWZhX3Bhcl9kM180NiwgCiAgICAgICAgICB3aGljaF9zdGF0ID0gIlByb3BvcnRpb24gVmFyIikgJT4lCiAgICBtdXRhdGUob3JkZXIgPSA0LCBzdHVkeSA9ICJTdHVkeSAzIiwKICAgICAgICAgICBzYW1wbGUgPSAiNC02eSIsIHNvbHV0aW9uID0gIjItZmFjdG9yIiksCiAgIyBzdHVkeSA0CiAgdmFjX2Z1bihlZmFfd2RtX2Q0X2FkLCBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kNF9hZCwgCiAgICAgICAgICB3aGljaF9zdGF0ID0gIlByb3BvcnRpb24gVmFyIikgJT4lCiAgICBtdXRhdGUob3JkZXIgPSAxLCBzdHVkeSA9ICJTdHVkeSA0IiwKICAgICAgICAgICBzYW1wbGUgPSAiYWR1bHRzIiwgc29sdXRpb24gPSAiMy1mYWN0b3IiKSwKICB2YWNfZnVuKGVmYV9wYXJfZDRfNDYsIGZhY3Rvcl9uYW1lc19lZmFfcGFyX2Q0XzQ2LCAKICAgICAgICAgIHdoaWNoX3N0YXQgPSAiUHJvcG9ydGlvbiBWYXIiKSAlPiUKICAgIG11dGF0ZShvcmRlciA9IDUsIHN0dWR5ID0gIlN0dWR5IDQiLAogICAgICAgICAgIHNhbXBsZSA9ICI0LTV5Iiwgc29sdXRpb24gPSAiMy1mYWN0b3IiKSwKICB2YWNfZnVuKGVmYV93ZG1fZDRfNDYsIGZhY3Rvcl9uYW1lc19lZmFfd2RtX2Q0XzQ2LCAKICAgICAgICAgIHdoaWNoX3N0YXQgPSAiUHJvcG9ydGlvbiBWYXIiKSAlPiUKICAgIG11dGF0ZShvcmRlciA9IDYsIHN0dWR5ID0gIlN0dWR5IDQiLAogICAgICAgICAgIHNhbXBsZSA9ICI0LTV5Iiwgc29sdXRpb24gPSAiNC1mYWN0b3IiKSkgJT4lCiAgIyBhbGwgc3R1ZGllcwogIG11dGF0ZSh1cl9mYWN0b3IgPSBjYXNlX3doZW4oZmFjdG9yID09ICJCT0RZLUhFQVJUIiB+ICJCT0RZLUhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJCT0RZIiwgZmFjdG9yKSB+ICJCT0RZIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJIRUFSVCIsIGZhY3RvcikgfiAiSEVBUlQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoIk1JTkQiLCBmYWN0b3IpIH4gIk1JTkQiKSwKICAgICAgICAgdXJfZmFjdG9yID0gZmFjdG9yKHVyX2ZhY3RvciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJCT0RZIiwgIkJPRFktSEVBUlQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhFQVJUIiwgIk1JTkQiKSksCiAgICAgICAgIHVyX2ZhY3Rvcl9wb3MgPSByZWNvZGUodXJfZmFjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCT0RZIiA9IDEsICJCT0RZLUhFQVJUIiA9IDEuNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEVBUlQiID0gMiwgIk1JTkQiID0gMyksCiAgICAgICAgIGFnZV9ncm91cCA9IGNhc2Vfd2hlbigKICAgICAgICAgICBzYW1wbGUgJWluJSBjKCJhZHVsdHMiLCAiMWEiLCAiMWIiLCAiMWMiLCAiMWQiKSB+ICJBZHVsdHMiLAogICAgICAgICAgIHNhbXBsZSA9PSAiNy05eSIgfiAiQ2hpbGRyZW4sIDctOXkiLAogICAgICAgICAgIHNhbXBsZSAlaW4lIGMoIjQtNnkiLCAiNC01eSIpIH4gIkNoaWxkcmVuLCA0LTZ5IiksCiAgICAgICAgIGFnZV9ncm91cCA9IGZhY3RvcihhZ2VfZ3JvdXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJBZHVsdHMiLCAiQ2hpbGRyZW4sIDctOXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hpbGRyZW4sIDQtNnkiKSkpCmBgYAoKYGBge3J9CnZhcl90b3RhbF9zdW0gPC0gdmFyX3RvdGFsX3JlcG9ydCAlPiUKICBncm91cF9ieShzdHVkeSwgc2FtcGxlLCBhZ2VfZ3JvdXAsIHNvbHV0aW9uKSAlPiUKICBzdW1tYXJpc2UodmFsdWUgPSBzdW0odmFsdWUpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKHVyX2ZhY3RvciA9ICJBbGwgZmFjdG9ycyIsCiAgICAgICAgIHVyX2ZhY3Rvcl9wb3MgPSA0KQpgYGAKCmBgYHtyfQp2YXJfc2hhcmVkX3JlcG9ydCA8LSBiaW5kX3Jvd3MoCiAgIyBzdHVkeSAxCiAgdmFjX2Z1bihlZmFfd2RtX2QxYV9hZCwgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDFhX2FkKSAlPiUKICAgIG11dGF0ZShvcmRlciA9IDEsIHN0dWR5ID0gIlN0dWR5IDFhIiwKICAgICAgICAgICBzYW1wbGUgPSAiMWEiLCBzb2x1dGlvbiA9ICIzLWZhY3RvciIpLAogIHZhY19mdW4oZWZhX3dkbV9kMWJfYWQsIGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxYl9hZCkgJT4lCiAgICBtdXRhdGUob3JkZXIgPSAxLCBzdHVkeSA9ICJTdHVkeSAxYiIsCiAgICAgICAgICAgc2FtcGxlID0gIjFiIiwgc29sdXRpb24gPSAiMy1mYWN0b3IiKSwKICB2YWNfZnVuKGVmYV93ZG1fZDFjX2FkLCBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWNfYWQpICU+JQogICAgbXV0YXRlKG9yZGVyID0gMSwgc3R1ZHkgPSAiU3R1ZHkgMWMiLAogICAgICAgICAgIHNhbXBsZSA9ICIxYyIsIHNvbHV0aW9uID0gIjMtZmFjdG9yIiksCiAgdmFjX2Z1bihlZmFfd2RtX2QxZF9hZCwgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDFkX2FkKSAlPiUKICAgIG11dGF0ZShvcmRlciA9IDEsIHN0dWR5ID0gIlN0dWR5IDFkIiwKICAgICAgICAgICBzYW1wbGUgPSAiMWQiLCBzb2x1dGlvbiA9ICIzLWZhY3RvciIpLAogICMgc3R1ZHkgMgogIHZhY19mdW4oZWZhX3dkbV9kMl9hZCwgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDJfYWQpICU+JQogICAgbXV0YXRlKG9yZGVyID0gMSwgc3R1ZHkgPSAiU3R1ZHkgMiIsCiAgICAgICAgICAgc2FtcGxlID0gImFkdWx0cyIsIHNvbHV0aW9uID0gIjMtZmFjdG9yIiksCiAgdmFjX2Z1bihlZmFfcGFyX2QyX2FkLCBmYWN0b3JfbmFtZXNfZWZhX3Bhcl9kMl9hZCkgJT4lCiAgICBtdXRhdGUob3JkZXIgPSAyLCBzdHVkeSA9ICJTdHVkeSAyIiwKICAgICAgICAgICBzYW1wbGUgPSAiYWR1bHRzIiwgc29sdXRpb24gPSAiNC1mYWN0b3IiKSwKICB2YWNfZnVuKGVmYV93ZG1fZDJfNzksIGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QyXzc5KSAlPiUKICAgIG11dGF0ZShvcmRlciA9IDMsIHN0dWR5ID0gIlN0dWR5IDIiLAogICAgICAgICAgIHNhbXBsZSA9ICI3LTl5Iiwgc29sdXRpb24gPSAiMy1mYWN0b3IiKSwKICAjIHN0dWR5IDMKICB2YWNfZnVuKGVmYV93ZG1fZDNfYWQsIGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QzX2FkKSAlPiUKICAgIG11dGF0ZShvcmRlciA9IDEsIHN0dWR5ID0gIlN0dWR5IDMiLAogICAgICAgICAgIHNhbXBsZSA9ICJhZHVsdHMiLCBzb2x1dGlvbiA9ICIzLWZhY3RvciIpLAogIHZhY19mdW4oZWZhX3dkbV9kM183OSwgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNzkpICU+JQogICAgbXV0YXRlKG9yZGVyID0gMywgc3R1ZHkgPSAiU3R1ZHkgMyIsCiAgICAgICAgICAgc2FtcGxlID0gIjctOXkiLCBzb2x1dGlvbiA9ICIzLWZhY3RvciIpLAogIHZhY19mdW4oZWZhX3dkbV9kM180NiwgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNDYpICU+JQogICAgbXV0YXRlKG9yZGVyID0gNSwgc3R1ZHkgPSAiU3R1ZHkgMyIsCiAgICAgICAgICAgc2FtcGxlID0gIjQtNnkiLCBzb2x1dGlvbiA9ICIzLWZhY3RvciIpLAogIHZhY19mdW4oZWZhX3Bhcl9kM180NiwgZmFjdG9yX25hbWVzX2VmYV9wYXJfZDNfNDYpICU+JQogICAgbXV0YXRlKG9yZGVyID0gNCwgc3R1ZHkgPSAiU3R1ZHkgMyIsCiAgICAgICAgICAgc2FtcGxlID0gIjQtNnkiLCBzb2x1dGlvbiA9ICIyLWZhY3RvciIpLAogICMgc3R1ZHkgNAogIHZhY19mdW4oZWZhX3dkbV9kNF9hZCwgZmFjdG9yX25hbWVzX2VmYV93ZG1fZDRfYWQpICU+JQogICAgbXV0YXRlKG9yZGVyID0gMSwgc3R1ZHkgPSAiU3R1ZHkgNCIsCiAgICAgICAgICAgc2FtcGxlID0gImFkdWx0cyIsIHNvbHV0aW9uID0gIjMtZmFjdG9yIiksCiAgdmFjX2Z1bihlZmFfcGFyX2Q0XzQ2LCBmYWN0b3JfbmFtZXNfZWZhX3Bhcl9kNF80NikgJT4lCiAgICBtdXRhdGUob3JkZXIgPSA1LCBzdHVkeSA9ICJTdHVkeSA0IiwKICAgICAgICAgICBzYW1wbGUgPSAiNC01eSIsIHNvbHV0aW9uID0gIjMtZmFjdG9yIiksCiAgdmFjX2Z1bihlZmFfd2RtX2Q0XzQ2LCBmYWN0b3JfbmFtZXNfZWZhX3dkbV9kNF80NikgJT4lCiAgICBtdXRhdGUob3JkZXIgPSA2LCBzdHVkeSA9ICJTdHVkeSA0IiwKICAgICAgICAgICBzYW1wbGUgPSAiNC01eSIsIHNvbHV0aW9uID0gIjQtZmFjdG9yIikpICU+JQogICMgYWxsIHN0dWRpZXMKICBtdXRhdGUodXJfZmFjdG9yID0gY2FzZV93aGVuKGZhY3RvciA9PSAiQk9EWS1IRUFSVCIgfiAiQk9EWS1IRUFSVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVwbCgiQk9EWSIsIGZhY3RvcikgfiAiQk9EWSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVwbCgiSEVBUlQiLCBmYWN0b3IpIH4gIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJNSU5EIiwgZmFjdG9yKSB+ICJNSU5EIiksCiAgICAgICAgIHVyX2ZhY3RvciA9IGZhY3Rvcih1cl9mYWN0b3IsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiQk9EWSIsICJCT0RZLUhFQVJUIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIRUFSVCIsICJNSU5EIikpLAogICAgICAgICB1cl9mYWN0b3JfcG9zID0gcmVjb2RlKHVyX2ZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQk9EWSIgPSAxLCAiQk9EWS1IRUFSVCIgPSAxLjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhFQVJUIiA9IDIsICJNSU5EIiA9IDMpLAogICAgICAgICBhZ2VfZ3JvdXAgPSBjYXNlX3doZW4oCiAgICAgICAgICAgc2FtcGxlICVpbiUgYygiYWR1bHRzIiwgIjFhIiwgIjFiIiwgIjFjIiwgIjFkIikgfiAiQWR1bHRzIiwKICAgICAgICAgICBzYW1wbGUgPT0gIjctOXkiIH4gIkNoaWxkcmVuLCA3LTl5IiwKICAgICAgICAgICBzYW1wbGUgJWluJSBjKCI0LTZ5IiwgIjQtNXkiKSB+ICJDaGlsZHJlbiwgNC02eSIpLAogICAgICAgICBhZ2VfZ3JvdXAgPSBmYWN0b3IoYWdlX2dyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiQWR1bHRzIiwgIkNoaWxkcmVuLCA3LTl5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoaWxkcmVuLCA0LTZ5IikpKQpgYGAKCiMjIEFuYWx5c2VzOiBUb3RhbCB2YXJpYW5jZSwgcHJvcG9ydGlvbiBvZiB0b3RhbCB2YXJpYW5jZSwgYW5kIHByb3BvcnRpb24gb2Ygc2hhcmVkIHZhcmlhbmNlIGV4cGxhaW5lZAoKRm9yIGVhY2ggRUZBIHNvbHV0aW9uLCB0aGUgX3RvdGFsIHZhcmlhbmNlXyBpbiB0aGUgbWVhc3VyZWQgdmFyaWFibGVzIGV4cGxhaW5lZCBieSBhbGwgb2YgdGhlIHJldGFpbmVkIGZhY3RvcnMgaW4gY29tYmluYXRpb24gY2FuIGJlIGVzdGltYXRlZCBieSB0YWtpbmcgdGhlIG1lYW4gY29tbXVuYWxpdHkgYWNyb3NzIGFsbCB2YXJpYWJsZXMgKHdoZXJlICJjb21tdW5hbGl0eSIgaXMgYSBtZWFzdXJlIG9mIHRoZSBkZWdyZWUgdG8gd2hpY2ggYSBnaXZlbiB2YXJpYWJsZSBpcyBjb3JyZWxhdGVkIHdpdGggYWxsIG90aGVyIHZhcmlhYmxlcywgaW5kZXhlZCBieSB0aGUgc3VtIG9mIHRoZSBzcXVhcmVkIGxvYWRpbmdzIG9mIHRoYXQgdmFyaWFibGUgb24gZWFjaCBvZiB0aGUgcmV0YWluZWQgZmFjdG9ycykuIFRoaXMgY291bGQgcmFuZ2UsIGluIHRoZW9yeSwgZnJvbSAwLTEwMCUsIGFuZCBwcm92aWRlcyBhbiBpbmRpY2F0aW9uIG9mIGhvdyB3ZWxsIHRoZSAiY29uY2VwdHVhbCB1bml0cyIgaWRlbnRpZmllZCBieSBFRkEgYWNjb3VudCBmb3IgdGhlIG9ic2VydmVkIGNvcnJlbGF0aW9ucyBhbW9uZyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zIGluIGEgcGFydGljdWxhciBzYW1wbGXigJR3aGljaCBpbiB0dXJuIG1pZ2h0IGJlIHRha2VuIGFzIGEgZ2F1Z2Ugb2YgdGhlIHNpemUgb2YgdGhlIHNldCBvZiBjb25jZXB0dWFsIHVuaXRzIGlkZW50aWZpZWQgYnkgdGhpcyBhbmFseXNpcy4gVGhlIHRvdGFsIHZhcmlhbmNlIGV4cGxhaW5lZCBieSBlYWNoIG9mIHRoZSBFRkEgc29sdXRpb25zIGRpc2N1c3NlZCBpbiB0aGlzIGNoYXB0ZXIgaXMgaWxsdXN0cmF0ZWQgaW4gRmlndXJlIDMuNSwgcGFuZWwgQS4KCkEgcmVzZWFyY2hlciBtaWdodCBhbHNvIGJlIGludGVyZXN0ZWQgaW4gYXNzZXNzaW5nIHRoZSBzaXplIG9mIGEgc2luZ2xlIGNvbmNlcHR1YWwgdW5pdCwgZWl0aGVyIGluIHRoZSBhYnNvbHV0ZSBvciBpbiByZWxhdGlvbiB0byB0aGUgb3RoZXIgY29uY2VwdHVhbCB1bml0cyBpZGVudGlmaWVkIGJ5IHRoYXQgRUZBIHNvbHV0aW9uLiBUbyB0aGlzIGVuZCwgdGhlIF9wcm9wb3J0aW9uIG9mIHRvdGFsIHZhcmlhbmNlXyBpbiBhbGwgdGhlIG1lYXN1cmVkIHZhcmlhYmxlcyBleHBsYWluZWQgYnkgYSBwYXJ0aWN1bGFyIGZhY3RvciBjYW4gYmUgY2FsY3VsYXRlZCBieSBkaXZpbmcgdGhlIHN1bSBvZiBzcXVhcmVkIGxvYWRpbmdzIGZvciB0aGF0IGZhY3RvciBhY3Jvc3MgYWxsIHZhcmlhYmxlcyBieSB0aGUgdG90YWwgbnVtYmVyIG9mIG1lYXN1cmVkIHZhcmlhYmxlcy4gKFRoZSBfdG90YWwgdmFyaWFuY2VfIGZvciBhIGdpdmVuIEVGQSBzb2x1dGlvbiwgZGlzY3Vzc2VkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLCBpcyB0aGUgc3VtIG9mIHRoZXNlIHByb3BvcnRpb25zIGFjcm9zcyBhbGwgZmFjdG9ycyBpbiB0aGF0IHNvbHV0aW9uLikgVGhpcyBjb3VsZCByYW5nZSwgaW4gdGhlb3J5LCBmcm9tIDAlIHVwIHRvIHRoZSB0b3RhbCB2YXJpYW5jZSBmb3IgdGhhdCBzb2x1dGlvbiAoZ2l2ZW4gaW4gRmlndXJlIDMuNSwgcGFuZWwgQSksIGFuZCBwcm92aWRlcyBhbiBpbmRpY2F0aW9uIG9mIHRoZSBhYnNvbHV0ZSBzaXplIG9mIHRoZSBwYXJ0aWN1bGFyIGNvbmNlcHR1YWwgdW5pdCBpbiBxdWVzdGlvbi4gVGhlIHByb3BvcnRpb24gb2YgdG90YWwgdmFyaWFuY2UgZXhwbGFpbmVkIGJ5IGVhY2ggZmFjdG9yLCBmb3IgZWFjaCBFRkEgc29sdXRpb24gZGlzY3Vzc2VkIGluIHRoaXMgY2hhcHRlciwgaXMgaWxsdXN0cmF0ZWQgaW4gRmlndXJlIDMuNSwgcGFuZWwgQi4KCkFub3RoZXIgYXBwcm9hY2ggdG8gZXN0aW1hdGluZyB0aGUgc2l6ZSBvZiBlYWNoIGZhY3RvciBpcyB0byBleGFtaW5lIHRoZSBfcHJvcG9ydGlvbiBvZiBzaGFyZWQgdmFyaWFuY2VfIGV4cGxhaW5lZCBieSBlYWNoIGZhY3RvciAocmVsYXRpdmUgdG8gdGhlIG90aGVyIGZhY3RvcnMgaW4gdGhhdCBFRkEgc29sdXRpb24pLiBGb3IgYSBnaXZlbiBzb2x1dGlvbiwgdGhlICJzaGFyZWQgdmFyaWFuY2UiIGV4cGxhaW5lZCBieSB0aGUgY29tYmluYXRpb24gb2YgYWxsIG9mIHRoZSBmYWN0b3JzIGluIHRoYXQgc29sdXRpb24gaXMsIGJ5IGRlZmluaXRpb24sIDEwMCUuIFRoZSBwcm9wb3J0aW9uIG9mIHRoaXMgInNoYXJlZCB2YXJpYW5jZSIgZXhwbGFpbmVkIGJ5IGEgc2luZ2xlIGZhY3RvciBjYW4gYmUgY2FsY3VsYXRlZCBieSBkaXZpZGluZyB0aGUgc3VtIG9mIHNxdWFyZWQgbG9hZGluZ3MgZm9yIHRoYXQgZmFjdG9yIGJ5IHRoZSBzdW0gb2YgdGhlIHN1bSBvZiBzcXVhcmVkIGxvYWRpbmdzIGZvciBhbGwgZmFjdG9ycyBpbiBhIGdpdmVuIHNvbHV0aW9uLiBGb3IgZXhhbXBsZSwgaW4gYSB0aHJlZS1mYWN0b3Igc29sdXRpb24sIGlmIGFsbCBmYWN0b3JzIHdlcmUgb2YgZXF1YWwgc2l6ZSwgZWFjaCB3b3VsZCBhY2NvdW50IGZvciAzMyUgb2YgdGhlIHNoYXJlZCB2YXJpYW5jZTsgaWYgb25lIGZhY3RvciBpbnN0ZWFkIGFjY291bnRlZCBmb3IgNTAlIG9mIHRoZSBzaGFyZWQgdmFyaWFuY2UgYW5kIHRoZSBvdGhlcnMgZWFjaCBhY2NvdW50ZWQgZm9yIDI1JSwgdGhpcyB3b3VsZCBwcm92aWRlIHNvbWUgZXZpZGVuY2UgdGhhdCB0aGUgZmlyc3QgZmFjdG9yIGlzIGluIHNvbWUgc2Vuc2UgbGFyZ2VyIG9yIG1vcmUgaW1wb3J0YW50IHRoYW4gdGhlIG90aGVyIHR3byBmYWN0b3JzLiBUaGUgcHJvcG9ydGlvbiBvZiBzaGFyZWQgdmFyaWFuY2UgZXhwbGFpbmVkIGJ5IGVhY2ggZmFjdG9yLCBmb3IgZWFjaCBFRkEgc29sdXRpb24gZGlzY3Vzc2VkIGluIHRoaXMgY2hhcHRlciwgaXMgaWxsdXN0cmF0ZWQgaW4gRmlndXJlIDMuNSwgcGFuZWwgQy4KCkluIG15IHZpZXcsIHRoaXMgbGFzdCBpbmRleCBvZiBzaXplIGlzIHRoZSBtb3N0IHVzZWZ1bCB3YXkgdG8gY29tcGFyZSB0aGUgc2l6ZSBvZiBjb25jZXB0dWFsIHVuaXRzIGFjcm9zcyB0aGUgdmFyaW91cyBzdHVkaWVzIGFuZCBhZ2UgZ3JvdXBzIHByZXNlbnRlZCBpbiB0aGlzIGNoYXB0ZXIsIGJlY2F1c2UgaXQgYWxsb3dzIG1lIHRvIGNvbXBhcmUgdGhlIHNpemVzIG9mIHNpbWlsYXIgY29uY2VwdHVhbCB1bml0cyAoZS5nLiwgZmFjdG9ycyB0aGF0IEkgaGF2ZSBsYWJlbGVkIEJPRFkpIHRoYXQgSSBoYXZlIGlkZW50aWZpZWQgaW4gZGlmZmVyZW50IGFnZSBncm91cHMgb3IgaW4gc3R1ZGllcyB1c2luZyBkaWZmZXJlbnQgZXhwZXJpbWVudGFsIHBhcmFkaWdtcywgZXZlbiB0aG91Z2ggdGhlc2UgYWdlIGdyb3VwcyBvciBzdHVkaWVzIG1pZ2h0IHZhcnkgaW4gdGhlIF90b3RhbCB2YXJpYW5jZV8gZXhwbGFpbmVkIGJ5IHRoZWlyIHJlc3BlY3RpdmUgRUZBIHNvbHV0aW9ucyAod2hpY2ggd291bGQsIGluIHR1cm4sIGltcG9zZSBkaWZmZXJlbnQgY29uc3RyYWludHMgb24gaG93IG11Y2ggb2YgdGhpcyB0b3RhbCB2YXJpYW5jZSBlYWNoIGZhY3RvciBjb3VsZCBleHBsYWluLCBpbiB0aGVvcnkpLiBGb3IgZXhhbXBsZSwgaW4gU3R1ZHkgNCwgdGhlIHRocmVlLWZhY3RvciBzb2x1dGlvbiBmb3IgYWR1bHRzIGV4cGxhaW5lZCBgciB2YXJfdG90YWxfc3VtICU+JSBmaWx0ZXIoc3R1ZHkgPT0gIlN0dWR5IDQiLCBzYW1wbGUgPT0gImFkdWx0cyIsIHNvbHV0aW9uID09ICIzLWZhY3RvciIpICU+JSBzZWxlY3QodmFsdWUpICU+JSBhcy5udW1lcmljKCkgJT4lIHJvdW5kKDIpKjEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSwgd2hpY2ggcGxhY2VzIGEgcmVsYXRpdmVseSBoaWdoICJjZWlsaW5nIiBvbiB0aGUgcHJvcG9ydGlvbiBvZiB0b3RhbCB2YXJpYW5jZSB0aGF0IGNvdWxkIGJlIGV4cGxhaW5lZCBieSBhIHNpbmdsZSBmYWN0b3I7IGluIGNvbXBhcmlzb24sIHRoZSB0aHJlZS1mYWN0b3Igc29sdXRpb24gZm9yIGNoaWxkcmVuIGV4cGxhaW5lZCBgciB2YXJfdG90YWxfc3VtICU+JSBmaWx0ZXIoc3R1ZHkgPT0gIlN0dWR5IDQiLCBzYW1wbGUgPT0gIjQtNXkiLCBzb2x1dGlvbiA9PSAiMy1mYWN0b3IiKSAlPiUgc2VsZWN0KHZhbHVlKSAlPiUgYXMubnVtZXJpYygpICU+JSByb3VuZCgyKSoxMDBgJSBvZiB0aGUgdG90YWwgdmFyaWFuY2UsIHBsYWNpbmcgYSBtdWNoIGxvd2VyICJjZWlsaW5nIiBvbiB0aGUgcHJvcG9ydGlvbiBvZiB0b3RhbCB2YXJpYW5jZSB0aGF0IGNvdWxkIGJlIGV4cGxhaW5lZCBieSBhIHNpbmdsZSBmYWN0b3IuIFdoaWxlIGl0IGlzIGludGVyZXN0aW5nIHRvIG5vdGUgdGhhdCB0aGUgQk9EWS1saWtlIGZhY3RvcnMgaW4gdGhlc2Ugc29sdXRpb25zIGV4cGxhaW5lZCBgciB2YXJfdG90YWxfcmVwb3J0ICU+JSBmaWx0ZXIoc3R1ZHkgPT0gIlN0dWR5IDQiLCBzYW1wbGUgPT0gImFkdWx0cyIsIHNvbHV0aW9uID09ICIzLWZhY3RvciIsIHVyX2ZhY3RvciA9PSAiQk9EWSIpICU+JSBzZWxlY3QodmFsdWUpICU+JSBhcy5udW1lcmljKCkgJT4lIHJvdW5kKDIpKjEwMGAlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiBhZHVsdHMnIHJlc3BvbnNlcyBhbmQgb25seSBgciB2YXJfdG90YWxfcmVwb3J0ICU+JSBmaWx0ZXIoc3R1ZHkgPT0gIlN0dWR5IDQiLCBzYW1wbGUgPT0gIjQtNXkiLCBzb2x1dGlvbiA9PSAiMy1mYWN0b3IiLCB1cl9mYWN0b3IgPT0gIkJPRFkiKSAlPiUgc2VsZWN0KHZhbHVlKSAlPiUgYXMubnVtZXJpYygpICU+JSByb3VuZCgyKSoxMDBgJSBvZiB0aGUgdG90YWwgdmFyaWFuY2UgaW4gY2hpbGRyZW4ncyByZXNwb25zZXMgKEZpZ3VyZSAzLjUsIHBhbmVsIEIpLCBpdCBpcyBpbiBteSB2aWV3IG1vcmUgaWxsdW1pbmF0aW5nIHRoYXQgaW4gYm90aCBzb2x1dGlvbnMgdGhlIEJPRFktbGlrZSBmYWN0b3IgZXhwbGFpbmVkIGEgdmVyeSBzaW1pbGFyIHByb3BvcnRpb24gb2YgdGhlIF9zaGFyZWRfIHZhcmlhbmNlIGluIGVhY2ggb2YgdGhlc2Ugc2FtcGxlcyAoYW1vbmcgYWR1bHRzOiBgciB2YXJfc2hhcmVkX3JlcG9ydCAlPiUgZmlsdGVyKHN0dWR5ID09ICJTdHVkeSA0Iiwgc2FtcGxlID09ICJhZHVsdHMiLCBzb2x1dGlvbiA9PSAiMy1mYWN0b3IiLCB1cl9mYWN0b3IgPT0gIkJPRFkiKSAlPiUgc2VsZWN0KHZhbHVlKSAlPiUgYXMubnVtZXJpYygpICU+JSByb3VuZCgyKSoxMDBgJTsgYW1vbmcgY2hpbGRyZW46IGByIHZhcl9zaGFyZWRfcmVwb3J0ICU+JSBmaWx0ZXIoc3R1ZHkgPT0gIlN0dWR5IDQiLCBzYW1wbGUgPT0gIjQtNXkiLCBzb2x1dGlvbiA9PSAiMy1mYWN0b3IiLCB1cl9mYWN0b3IgPT0gIkJPRFkiKSAlPiUgc2VsZWN0KHZhbHVlKSAlPiUgYXMubnVtZXJpYygpICU+JSByb3VuZCgyKSoxMDBgJSkuCgojIyBSZXN1bHRzIChhbGwgc3R1ZGllcykKClRoZSB0b3RhbCB2YXJpYW5jZSBleHBsYWluZWQgYnkgdGhlIEVGQXMgcmVwb3J0ZWQgaW4gdGhpcyBjaGFwdGVyIChGaWd1cmUgMy41LCBwYW5lbCBBKSB0ZW5kZWQgdG8gYmUgbGFyZ2VzdCBmb3IgYWR1bHQgc2FtcGxlcyAocmFuZ2U6IGByIHZhcl90b3RhbF9zdW0gJT4lIGZpbHRlcihzYW1wbGUgPT0gImFkdWx0cyIpICU+JSBzdW1tYXJpc2UobWluID0gbWluKHZhbHVlKSkgJT4lIGFzLm51bWVyaWMoKSAlPiUgcm91bmQoMikqMTAwYC1gciB2YXJfdG90YWxfc3VtICU+JSBmaWx0ZXIoc2FtcGxlID09ICJhZHVsdHMiKSAlPiUgc3VtbWFyaXNlKG1heCA9IG1heCh2YWx1ZSkpICU+JSBhcy5udW1lcmljKCkgJT4lIHJvdW5kKDIpKjEwMGAlOyBsZWZ0IGNvbHVtbiksIHNtYWxsZXIgZm9yIHNhbXBsZXMgb2YgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiAocmFuZ2U6IGByIHZhcl90b3RhbF9zdW0gJT4lIGZpbHRlcihzYW1wbGUgPT0gIjctOXkiKSAlPiUgc3VtbWFyaXNlKG1pbiA9IG1pbih2YWx1ZSkpICU+JSBhcy5udW1lcmljKCkgJT4lIHJvdW5kKDIpKjEwMGAtYHIgdmFyX3RvdGFsX3N1bSAlPiUgZmlsdGVyKHNhbXBsZSA9PSAiNy05eSIpICU+JSBzdW1tYXJpc2UobWF4ID0gbWF4KHZhbHVlKSkgJT4lIGFzLm51bWVyaWMoKSAlPiUgcm91bmQoMikqMTAwYCU7IG1pZGRsZSBjb2x1bW4pLCBhbmQgbG93ZXN0IGluIHRoZSB5b3VuZ2VzdCBzYW1wbGVzIG9mIGNoaWxkcmVuIChyYW5nZTogYHIgdmFyX3RvdGFsX3N1bSAlPiUgZmlsdGVyKGdyZXBsKCI0Iiwgc2FtcGxlKSkgJT4lIHN1bW1hcmlzZShtaW4gPSBtaW4odmFsdWUpKSAlPiUgYXMubnVtZXJpYygpICU+JSByb3VuZCgyKSoxMDBgLWByIHZhcl90b3RhbF9zdW0gJT4lIGZpbHRlcihncmVwbCgiNCIsIHNhbXBsZSkpICU+JSBzdW1tYXJpc2UobWF4ID0gbWF4KHZhbHVlKSkgJT4lIGFzLm51bWVyaWMoKSAlPiUgcm91bmQoMikqMTAwYCU7IHJpZ2h0IGNvbHVtbikuIFRoaXMgY291bGQgYmUgdGFrZW4gdG8gaW5kaWNhdGUgdGhhdCB0aGUgY29uY2VwdHVhbCBzdHJ1Y3R1cmVzIGlkZW50aWZpZWQgYnkgRUZBIHdlcmUgbW9yZSByb2J1c3QgYW5kIHBlcmhhcHMgcGxheWVkIGEgYmlnZ2VyIHJvbGUgaW4gYWR1bHRzJyBtZW50YWwgY2FwYWNpdHkgYXR0cmlidXRpb25zLCByZWxhdGl2ZSB0byBjaGlsZHJlbiAoYXQgbGVhc3QgaW4gdGhpcyBnZW5lcmFsIGV4cGVyaW1lbnRhbCBwYXJhZGlnbSkuIEhvd2V2ZXIsIHRoaXMgcGF0dGVybiBpcyBhbHNvIGluIGxpbmUgd2l0aCBhIGRvbWFpbi1nZW5lcmFsIGRlY3JlYXNlIGluIHRoZSAibm9pc2UiIGluaGVyZW50IHRvIHBhcnRpY2lwYW50cycgYmVoYXZpb3JhbCByZXNwb25zZXMgd2l0aCBkZXZlbG9wbWVudC4KCkFtb25nIGFkdWx0cyAoRmlndXJlIDMuNSwgbGVmdCBjb2x1bW5zKSwgYSBjbGVhciBwYXR0ZXJuIGVtZXJnZWQgaW4gdGhlIHJlbGF0aXZlIHNpemUgb2YgdGhlc2UgZmFjdG9ycyBhcyBpbmRleGVkIGJ5IHZhcmlhbmNlIGV4cGxhaW5lZCAoc2VlIHBhbmVsIEIgZm9yIHRoZSBwcm9wb3J0aW9uIG9mIHRvdGFsIHZhcmlhbmNlIGV4cGxhaW5lZCwgYW5kIHBhbmVsIEMgZm9yIHRoZSBwcm9wb3J0aW9uIG9mIHNoYXJlZCB2YXJpYW5jZSBleHBsYWluZWQpLiBJbiBhbGwgZWlnaHQgb2YgdGhlIEVGQSBzb2x1dGlvbnMgaW5jbHVkZWQgaW4gdGhpcyBjaGFwdGVyLCBhZHVsdHMnIEJPRFkgYW5kIEhFQVJUIGZhY3RvcnMgZXhwbGFpbmVkIGEgZGlzcHJvcG9ydGlvbmF0ZWx5IGxhcmdlIGFtb3VudCBvZiB0aGUgdmFyaWFuY2UgKG1vcmUgdGhhbiB3b3VsZCBiZSBleHBlY3RlZCBpZiBhbGwgZmFjdG9ycyB3ZXJlIGVxdWFsIGluIHNpemU7IHNlZSBwYW5lbCBDKSwgYW5kIHRoZWlyIE1JTkQgZmFjdG9yIGV4cGxhaW5lZCBhIGRpc3Byb3BvcnRpb25hdGVseSBzbWFsbCBhbW91bnQgKGxlc3MgdGhhbiB3b3VsZCBiZSBleHBlY3RlZCBpZiBhbGwgZmFjdG9ycyB3ZXJlIGVxdWFsIGluIHNpemUpLiBJbiBtb3N0IG9mIHRoZXNlIHNvbHV0aW9ucywgdGhlIEJPRFkgZmFjdG9yIGV4cGxhaW5lZCBzbGlnaHRseSBtb3JlIHZhcmlhbmNlIHRoYW4gdGhlIEhFQVJUIGZhY3RvciwgYnV0IHRoZXNlIGRpZmZlcmVuY2VzIHdlcmUgZ2VuZXJhbGx5IHF1aXRlIHNtYWxsLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGNvbmNlcHR1YWwgdW5pdHMgSSBoYXZlIHJlZmVycmVkIHRvIGFzIEJPRFkgYW5kIEhFQVJUIG1heSBwbGF5IGVzcGVjaWFsbHkgbGFyZ2Ugcm9sZXMgaW4gVVMgYWR1bHRzJyByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUsIGF0IGxlYXN0IHdoZW4gdGhleSBhcmUgYXNzZXNzaW5nIHRoZSBtZW50YWwgY2FwYWNpdGllcyBvZiB2YXJpb3VzIGJlaW5ncyBpbiB0aGUgd29ybGQuCgpBbW9uZyA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIChGaWd1cmUgMy41LCBtaWRkbGUgY29sdW1ucyksIGEgc2ltaWxhciBwYXR0ZXJuIHRvIHRoYXQgb2YgYWR1bHRzIHdhcyBvYnNlcnZlZCBpbiBTdHVkeSAzIChvcmFuZ2UpLCB3aXRoIGNoaWxkcmVuJ3MgQk9EWSBhbmQgSEVBUlQgZmFjdG9ycyBleHBsYWluaW5nIG1vcmUgdmFyaWFuY2UgdGhhbiB0aGVpciBNSU5EIGZhY3RvciAoc2VlIHBhbmVsIEIgZm9yIHRoZSBwcm9wb3J0aW9uIG9mIHRvdGFsIHZhcmlhbmNlIGV4cGxhaW5lZCwgYW5kIHBhbmVsIEMgZm9yIHRoZSBwcm9wb3J0aW9uIG9mIHNoYXJlZCB2YXJpYW5jZSBleHBsYWluZWQpLiBIb3dldmVyLCBpbiBTdHVkeSAyIChwdXJwbGUpLCBjaGlsZHJlbidzIEhFQVJUIGZhY3RvciBmYXIgbW9yZSB2YXJpYW5jZSB0aGFuIGVpdGhlciBvZiB0aGUgb3RoZXIgZmFjdG9ycy4gVGhpcyByYWlzZXMgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlIGNvbmNlcHR1YWwgdW5pdCBJIGhhdmUgY2FsbGVkIEhFQVJUIGxvb21zIGVzcGVjaWFsbHkgbGFyZ2UgaW4gdGhlIHJlcHJlc2VudGF0aW9ucyBvZiBjaGlsZHJlbiBpbiB0aGlzIGFnZSByYW5nZeKAlHBlcmhhcHMgYmVjYXVzZSBpdCBoYXMgZW1lcmdlZCByZWxhdGl2ZWx5IHJlY2VudGx5IGFzIGEgZGlzdGluY3QgdW5pdCBpbiBpdHMgb3duIHJpZ2h0LiBGdXJ0aGVyIHN0dWRpZXMgd291bGQgYmUgcmVxdWlyZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBwaGVub21lbm9uIGlzIHJlbGlhYmxlIGFuZCB0aGUgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCBpcyBtb3JlIG9yIGxlc3MgbGlrZWx5IHRvIG1hbmlmZXN0LgoKQW1vbmcgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiAoU3R1ZHkgMykgYW5kIDQtIHRvIDUteWVhci1vbGQgY2hpbGRyZW4gKFN0dWR5IDQ7IEZpZ3VyZSAzLjUsIHJpZ2h0IGNvbHVtbnMpLCB0aGUgQk9EWS1saWtlIGZhY3RvcnMgZXhwbGFpbmVkIGRpc3Byb3BvcnRpb25hdGVseSBsYXJnZSBhbW91bnRzIG9mIHZhcmlhbmNlIChzZWUgcGFuZWwgQiBmb3IgdGhlIHByb3BvcnRpb24gb2YgdG90YWwgdmFyaWFuY2UgZXhwbGFpbmVkLCBhbmQgcGFuZWwgQyBmb3IgdGhlIHByb3BvcnRpb24gb2Ygc2hhcmVkIHZhcmlhbmNlIGV4cGxhaW5lZCkuIFRoaXMgaG9sZHMgdHJ1ZSBhY3Jvc3MgYWxsIHNvbHV0aW9ucyBmb3IgYm90aCBzdHVkaWVzICh3aGVuIGNvbWJpbmluZyB0aGUgdHdvIEJPRFktbGlrZSBmYWN0b3JzIGluIHRoZSBmb3VyLWZhY3RvciBzb2x1dGlvbikgYW5kIHdhcyBwYXJ0aWN1bGFybHkgcHJvbm91bmNlZCBpbiB0aGUgdHdvLWZhY3RvciBzb2x1dGlvbiBmb3IgU3R1ZHkgMyAob3JhbmdlLCB0b3Agcm93KSwgaW4gd2hpY2ggeW91bmdlciBjaGlsZHJlbidzIEJPRFktSEVBUlQgZmFjdG9yIHdhcyBuZWFybHkgdHdpY2UgdGhlICdzaXplJyBvZiB0aGVpciBNSU5EIGZhY3RvcuKAlHBlcmhhcHMgYSBoYXJiaW5nZXIgb2YgYW4gaW1wZW5kaW5nIHNwbGl0IGJldHdlZW4gQk9EWSBhbmQgSEVBUlQgYXMgeW91bmcgY2hpbGRyZW4ncyBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9ucyBiZWNvbWUgbW9yZSBsaWtlIHRoZSBvbGRlciBjaGlsZHJlbiBhbmQgYWR1bHRzIGFyb3VuZCB0aGVtLiBUaGUgdmFyaWFuY2UgZXhwbGFpbmVkIGJ5IHlvdW5nZXIgY2hpbGRyZW4ncyBIRUFSVC1saWtlIGZhY3RvcnMgaW4gdGhlIHRocmVlLWZhY3RvciBzb2x1dGlvbnMgZm9yIFN0dWRpZXMgMyBhbmQgNCAobWlkZGxlIHJvdykgYXBwZWFycyB0byBoYXZlIGJlZW4gc29tZXdoYXQgc21hbGxlciB0aGFuIGl0IHdhcyBhbW9uZyBvbGRlciBjaGlsZHJlbiBhbmQgYWR1bHRzLCBwYXJ0aWN1bGFybHkgaW4gU3R1ZHkgNCAodHVycXVvaXNlKSwgd2hpbGUgdGhlIHJlbGF0aXZlIHByb3BvcnRpb24gb2Ygc2hhcmVkIHZhcmlhbmNlIGV4cGxhaW5lZCBieSB0aGUgbW9yZSBNSU5ELWxpa2UgZmFjdG9ycyBhcHBlYXJzIHRvIGhhdmUgYmVlbiByb3VnaGx5IGNvbXBhcmFibGUgdG8gdGhhdCBvZiBhZHVsdHMgaW4gYWxsIHN0dWRpZXMuIAoKVGFrZW4gdG9nZXRoZXIsIHRoZXNlIG9ic2VydmF0aW9ucyBhcmUgZ2VuZXJhbGx5IGNvbnNpc3RlbnQgd2l0aCB0aGUgcG9zc2liaWxpdHkgdGhhdCB0aGUgY29uY2VwdHVhbCB1bml0IHRoYXQgSSBoYXZlIGNhbGxlZCBNSU5EIG1heSBiZSByZWxhdGl2ZWx5IG1hdHVyZSBieSB0aGUgcHJlc2Nob29sIHllYXJzLCBub3Qgb25seSBpbiBpdHMgY29udGVudCAodGhlIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyB0aGF0IGFyZSBjbG9zZWx5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbmNlcHR1YWwgdW5pdCkgYnV0IGFsc28gaW4gaXRzIHJlbGF0aXZlIHNpemUuIEJ5IGNvbnRyYXN0LCBJIHdvdWxkIGludGVycHJldCB0aGVzZSBwYXR0ZXJucyBhcyBwcm92aWRpbmcgZnVydGhlciBpbmRpY2F0aW9uIG9mIGFuIG9uZ29pbmcgbmVnb3RpYXRpb24gb2YgdGhlIHBoeXNpb2xvZ2ljYWwgKEJPRFkpIGFuZCBzb2NpYWwtZW1vdGlvbmFsIChIRUFSVCkgZG9tYWlucyBkdXJpbmcgZWFybHkgY2hpbGRob29kLCBhbmQgcGVyaGFwcyBleHRlbmRpbmcgaW50byBtaWRkbGUgY2hpbGRob29kLgoKYGBge3J9CnBvcyA8LSBwb3NpdGlvbl9qaXR0ZXIod2lkdGggPSAwLjEsIHNlZWQgPSAyKQoKcGxvdF92YXJfc2hhcmVkIDwtIHZhcl9zaGFyZWRfcmVwb3J0ICU+JQogIG11dGF0ZShzb2x1dGlvbiA9IHBhc3RlMChzb2x1dGlvbiwgIiBzb2x1dGlvbiIpLAogICAgICAgICBsYWIgPSBjYXNlX3doZW4oCiAgICAgICAgICAgKHNvbHV0aW9uID09ICI0LWZhY3RvciBzb2x1dGlvbiIpICYgCiAgICAgICAgICAgICAoKHN0dWR5ID09ICJTdHVkeSAyIiAmIHVyX2ZhY3RvciA9PSAiTUlORCIpIHwgCiAgICAgICAgICAgICAgICAoc3R1ZHkgPT0gIlN0dWR5IDQiICYgdXJfZmFjdG9yID09ICJCT0RZIikpIH4gCiAgICAgICAgICAgICBmYWN0b3IsCiAgICAgICAgICAgdXJfZmFjdG9yID09ICJCT0RZLUhFQVJUIiB+IGZhY3RvciwKICAgICAgICAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXyksCiAgICAgICAgIGRlc2lnbiA9IGNhc2Vfd2hlbigKICAgICAgICAgICBzdHVkeSAlaW4lIGMoIlN0dWR5IDFhIiwgIlN0dWR5IDFiIiwgIlN0dWR5IDIiKSB+ICJlZGdlIGNhc2UgKGJldHdlZW4tU3MpIiwKICAgICAgICAgICBzdHVkeSAlaW4lIGMoIlN0dWR5IDFjIiwgIlN0dWR5IDQiKSB+ICJlZGdlIGNhc2UgKHdpdGhpbi1TcykiLAogICAgICAgICAgIHN0dWR5ICVpbiUgYygiU3R1ZHkgMWQiLCAiU3R1ZHkgMyIpIH4gImRpdmVyc2UgY2hhcmFjdGVycyAoYmV0d2Vlbi1TcykiKSwKICAgICAgICAgZGVzaWduID0gZmFjdG9yKGRlc2lnbiwgCiAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJlZGdlIGNhc2UgKGJldHdlZW4tU3MpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVkZ2UgY2FzZSAod2l0aGluLVNzKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXZlcnNlIGNoYXJhY3RlcnMgKGJldHdlZW4tU3MpIikpKSAlPiUKICBhcnJhbmdlKHN0dWR5LCBzYW1wbGUsIHVyX2ZhY3RvciwgZmFjdG9yKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB1cl9mYWN0b3JfcG9zLCB5ID0gdmFsdWUsIGNvbG9yID0gc3R1ZHksIHNoYXBlID0gZGVzaWduKSkgKwogIGZhY2V0X2dyaWQoc29sdXRpb24gfiBhZ2VfZ3JvdXAsIHNjYWxlcyA9ICJmcmVlX3kiKSArCiAgZ2VvbV9obGluZShkYXRhID0gZGF0YS5mcmFtZShzb2x1dGlvbiA9IGMoIjItZmFjdG9yIHNvbHV0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMy1mYWN0b3Igc29sdXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0LWZhY3RvciBzb2x1dGlvbiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBjKDEvMiwgMS8zLCAxLzQpKSwKICAgICAgICAgICAgIGFlcyh4ID0gTlVMTCwgeSA9IE5VTEwsIGNvbG9yID0gTlVMTCwgeWludGVyY2VwdCA9IGVxdWFsKSwKICAgICAgICAgICAgIHNpemUgPSAwLjI1LCBsdHkgPSAyLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3BhdGgoYWVzKGdyb3VwID0gc3R1ZHkpLCBwb3NpdGlvbiA9IHBvcywgYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fcG9pbnQocG9zaXRpb24gPSBwb3MsIHNob3cubGVnZW5kID0gVCwgc2l6ZSA9IDIpICsKICBnZW9tX3RleHRfcmVwZWwoYWVzKGxhYmVsID0gbGFiKSwgc2l6ZSA9IDMsIHNob3cubGVnZW5kID0gRiwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3MsIGJveC5wYWRkaW5nID0gMC4zNSwgbmEucm0gPSBULAogICAgICAgICAgICAgICAgICBzZWdtZW50LmFscGhhID0gMC41KSArCiAgc2NhbGVfY29sb3VyX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZGlyZWN0aW9uID0gLTEpICsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygxOSwgMTUsIDE3KSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSAxOjMsIGxhYmVscyA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpLAogICAgICAgICAgICAgICAgICAgICBtaW5vcl9icmVha3MgPSBOVUxMKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxLCAwLjEpLCAKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICJQcm9wb3J0aW9uIG9mIHNoYXJlZCB2YXJpYW5jZSBleHBsYWluZWQgYnkgZWFjaCBmYWN0b3IiLAogICAgICAgeCA9ICJGYWN0b3IiLCB5ID0gIlNoYXJlZCB2YXJpYW5jZSBleHBsYWluZWQiLCBjb2xvciA9ICJTdHVkeSIpICMrCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpCmBgYAoKYGBge3J9CnBsb3RfdmFyX3RvdGFsIDwtIHZhcl90b3RhbF9yZXBvcnQgJT4lCiAgbXV0YXRlKHNvbHV0aW9uID0gcGFzdGUwKHNvbHV0aW9uLCAiIHNvbHV0aW9uIiksCiAgICAgICAgIGxhYiA9IGNhc2Vfd2hlbigKICAgICAgICAgICAoc29sdXRpb24gPT0gIjQtZmFjdG9yIHNvbHV0aW9uIikgJiAKICAgICAgICAgICAgICgoc3R1ZHkgPT0gIlN0dWR5IDIiICYgdXJfZmFjdG9yID09ICJNSU5EIikgfCAKICAgICAgICAgICAgICAgIChzdHVkeSA9PSAiU3R1ZHkgNCIgJiB1cl9mYWN0b3IgPT0gIkJPRFkiKSkgfiAKICAgICAgICAgICAgIGZhY3RvciwKICAgICAgICAgICB1cl9mYWN0b3IgPT0gIkJPRFktSEVBUlQiIH4gZmFjdG9yLAogICAgICAgICAgIFRSVUUgfiBOQV9jaGFyYWN0ZXJfKSwKICAgICAgICAgZGVzaWduID0gY2FzZV93aGVuKAogICAgICAgICAgIHN0dWR5ICVpbiUgYygiU3R1ZHkgMWEiLCAiU3R1ZHkgMWIiLCAiU3R1ZHkgMiIpIH4gImVkZ2UgY2FzZSAoYmV0d2Vlbi1TcykiLAogICAgICAgICAgIHN0dWR5ICVpbiUgYygiU3R1ZHkgMWMiLCAiU3R1ZHkgNCIpIH4gImVkZ2UgY2FzZSAod2l0aGluLVNzKSIsCiAgICAgICAgICAgc3R1ZHkgJWluJSBjKCJTdHVkeSAxZCIsICJTdHVkeSAzIikgfiAiZGl2ZXJzZSBjaGFyYWN0ZXJzIChiZXR3ZWVuLVNzKSIpLAogICAgICAgICBkZXNpZ24gPSBmYWN0b3IoZGVzaWduLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImVkZ2UgY2FzZSAoYmV0d2Vlbi1TcykiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWRnZSBjYXNlICh3aXRoaW4tU3MpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpdmVyc2UgY2hhcmFjdGVycyAoYmV0d2Vlbi1TcykiKSkpICU+JQogIGFycmFuZ2Uoc3R1ZHksIHNhbXBsZSwgdXJfZmFjdG9yLCBmYWN0b3IpICU+JQogIGdncGxvdChhZXMoeCA9IHVyX2ZhY3Rvcl9wb3MsIHkgPSB2YWx1ZSwgY29sb3IgPSBzdHVkeSwgc2hhcGUgPSBkZXNpZ24pKSArCiAgZmFjZXRfZ3JpZChzb2x1dGlvbiB+IGFnZV9ncm91cCkgKwogIGdlb21fcGF0aChhZXMoZ3JvdXAgPSBzdHVkeSksIHBvc2l0aW9uID0gcG9zLCBhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9wb2ludChwb3NpdGlvbiA9IHBvcywgc2hvdy5sZWdlbmQgPSBULCBzaXplID0gMikgKwogIGdlb21fdGV4dF9yZXBlbChhZXMobGFiZWwgPSBsYWIpLCBzaXplID0gMywgc2hvdy5sZWdlbmQgPSBGLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvcywgYm94LnBhZGRpbmcgPSAwLjM1LCBuYS5ybSA9IFQsCiAgICAgICAgICAgICAgICAgIHNlZ21lbnQuYWxwaGEgPSAwLjUpICsKICBzY2FsZV9jb2xvdXJfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBkaXJlY3Rpb24gPSAtMSkgKwogIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDE5LCAxNSwgMTcpKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IDE6NCwgCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIsICJBbGwgZmFjdG9ycyIpLAogICAgICAgICAgICAgICAgICAgICBtaW5vcl9icmVha3MgPSBOVUxMKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxLCAwLjEpLCBtaW5vcl9icmVha3MgPSBOVUxMLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygwLCBtYXgodmFyX3RvdGFsX3JlcG9ydCR2YWx1ZSkpLAogICAgICAgICAgICAgICAgICAgICAjIGxpbWl0cyA9IGMoMCwgMSksCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHNjYWxlczo6cGVyY2VudF9mb3JtYXQoYWNjdXJhY3kgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiUHJvcG9ydGlvbiBvZiB0b3RhbCB2YXJpYW5jZSBleHBsYWluZWQgYnkgZWFjaCBmYWN0b3IiLAogICAgICAgeCA9ICJGYWN0b3IiLCB5ID0gIlRvdGFsIHZhcmlhbmNlIGV4cGxhaW5lZCIsIGNvbG9yID0gIlN0dWR5IikgIyArCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkKYGBgCgpgYGB7cn0KcGxvdF92YXJfdG90YWxfc3VtIDwtIHZhcl90b3RhbF9zdW0gJT4lCiAgbXV0YXRlKHNvbHV0aW9uID0gcGFzdGUwKHNvbHV0aW9uLCAiIHNvbHV0aW9uIiksCiAgICAgICAgIGRlc2lnbiA9IGNhc2Vfd2hlbigKICAgICAgICAgICBzdHVkeSAlaW4lIGMoIlN0dWR5IDFhIiwgIlN0dWR5IDFiIiwgIlN0dWR5IDIiKSB+ICJlZGdlIGNhc2UgKGJldHdlZW4tU3MpIiwKICAgICAgICAgICBzdHVkeSAlaW4lIGMoIlN0dWR5IDFjIiwgIlN0dWR5IDQiKSB+ICJlZGdlIGNhc2UgKHdpdGhpbi1TcykiLAogICAgICAgICAgIHN0dWR5ICVpbiUgYygiU3R1ZHkgMWQiLCAiU3R1ZHkgMyIpIH4gImRpdmVyc2UgY2hhcmFjdGVycyAoYmV0d2Vlbi1TcykiKSwKICAgICAgICAgZGVzaWduID0gZmFjdG9yKGRlc2lnbiwgCiAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJlZGdlIGNhc2UgKGJldHdlZW4tU3MpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVkZ2UgY2FzZSAod2l0aGluLVNzKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXZlcnNlIGNoYXJhY3RlcnMgKGJldHdlZW4tU3MpIikpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB1cl9mYWN0b3IsIHkgPSB2YWx1ZSwgY29sb3IgPSBzdHVkeSwgc2hhcGUgPSBkZXNpZ24pKSArCiAgZmFjZXRfZ3JpZChzb2x1dGlvbiB+IGFnZV9ncm91cCwgc2NhbGVzID0gImZyZWVfeCIsIHNwYWNlID0gImZyZWVfeCIpICsKICBnZW9tX3BvaW50KHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAxKSwgc2hvdy5sZWdlbmQgPSBULCBzaXplID0gMikgKwogIHNjYWxlX2NvbG91cl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGRpcmVjdGlvbiA9IC0xLAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQodGl0bGUucG9zaXRpb24gPSAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsIG5jb2wgPSA3KSkgKwogIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDE5LCAxNSwgMTcpLAogICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZCh0aXRsZS5wb3NpdGlvbiA9ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImhvcml6b250YWwiLCBuY29sID0gMykpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDEsIDAuMSksIG1pbm9yX2JyZWFrcyA9IE5VTEwsIAogICAgICAgICAgICAgICAgICAgICAjIGxpbWl0cyA9IGMoMCwgbWF4KHZhcl90b3RhbF9yZXBvcnQkdmFsdWUpKSwKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygwLCAxKSwKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICJUb3RhbCB2YXJpYW5jZSBleHBsYWluZWQgYnkgYWxsIGZhY3RvcnMiLAogICAgICAgeCA9ICJGYWN0b3IiLCB5ID0gIlRvdGFsIHZhcmlhbmNlIGV4cGxhaW5lZCIsIGNvbG9yID0gIlN0dWR5IiwgCiAgICAgICBzaGFwZSA9ICJWYXJpYW50IG9mIGV4cGVyaW1lbnRhbCBhcHByb2FjaCIpICsgCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIsIGxlZ2VuZC5kaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsCiAgICAgICAgbGVnZW5kLnNwYWNpbmcgPSB1bml0KDIsICJsaW5lcyIpKQpgYGAKCmBgYHtyfQpwbG90X3Zhcl9sZWdlbmQgPC0gZ2V0X2xlZ2VuZChwbG90X3Zhcl90b3RhbF9zdW0pCmBgYAoKYGBge3J9CnRfYWdlXzc5IDwtIHQudGVzdChhZ2UgfiBzdHVkeSwKICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkMl83OSAlPiUgZGlzdGluY3Qoc3R1ZHksIHN1YmlkLCBhZ2UpICU+JQogICAgICAgICAgICAgICAgICAgICBmdWxsX2pvaW4oZDNfNzkgJT4lIGRpc3RpbmN0KHN0dWR5LCBzdWJpZCwgYWdlKSkgJT4lCiAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0KCkpCgp0X2FnZV80NiA8LSB0LnRlc3QoYWdlIH4gc3R1ZHksCiAgICAgICAgICAgICAgICAgICBkYXRhID0gZDNfNDYgJT4lIGRpc3RpbmN0KHN0dWR5LCBzdWJpZCwgYWdlKSAlPiUKICAgICAgICAgICAgICAgICAgICAgZnVsbF9qb2luKGQ0XzQ2ICU+JSBkaXN0aW5jdChzdHVkeSwgc3ViaWQsIGFnZSkpICU+JQogICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdCgpKQoKY2F0KCJPbGRlciBjaGlsZHJlbjpcbiIpCnRfYWdlXzc5CgpjYXQoIllvdW5nZXIgY2hpbGRyZW46XG4iKQp0X2FnZV80NgpgYGAKCmBgYHtyfQpmaWd1cmUzLjUgPC0gcGxvdF9ncmlkKHBsb3RfdmFyX3RvdGFsX3N1bSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgICAgICAgICAgICAgcGxvdF92YXJfdG90YWwgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLCAKICAgICAgICAgICAgICAgICAgICAgICBwbG90X3Zhcl9zaGFyZWQgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLCAKICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMywgcmVsX3dpZHRocyA9IGMoMSwgMSwgMSksIAogICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9ICJBVVRPIikKCmZpZ3VyZTMuNV9sZWcgPC0gcGxvdF9ncmlkKGZpZ3VyZTMuNSwgcGxvdF92YXJfbGVnZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMSkpCgpmaWd1cmUzLjVfY2FwIDwtIGFkZF9zdWIoZmlndXJlMy41X2xlZywgc3RyX3dyYXAocGFzdGUwKAogICJGaWd1cmUgMy41OiBFc3RpbWF0ZXMgb2YgdGhlICdzaXplJyBvZiBmYWN0b3JzIGluIGVhY2ggb2YgdGhlIEVGQSBzb2x1dGlvbnMgcmVwb3J0ZWQgaW4gdGhpcyBjaGFwdGVyLCBvcmdhbml6ZWQgYnkgc3R1ZHksIGFnZSBncm91cCwgYW5kIHNvbHV0aW9uLiBOb3RlIHRoYXQgY2hpbGRyZW4gaW4gdGhlICc0LTZ5JyBhZ2UgcmFuZ2Ugd2VyZSBzaWduaWZpY2FudGx5IHlvdW5nZXIgaW4gU3R1ZHkgNCAobWVhbiBhZ2U6ICIsIAogIGZvcm1hdChyb3VuZCh0X2FnZV80NiRlc3RpbWF0ZVsyXSwgMiksIG5zbWFsbCA9IDIpLCAKICAieSkgdGhhbiBpbiBTdHVkeSAzIChtZWFuIGFnZTogIiwgCiAgZm9ybWF0KHJvdW5kKHRfYWdlXzQ2JGVzdGltYXRlWzFdLCAyKSwgbnNtYWxsID0gMiksIAogICJ5OyBXZWxjaCdzIHQoIiwgCiAgZm9ybWF0KHJvdW5kKHRfYWdlXzQ2JHBhcmFtZXRlciwgMiksIG5zbWFsbCA9IDIpLAogICIpID0gIiwgCiAgZm9ybWF0KHJvdW5kKHRfYWdlXzQ2JHN0YXRpc3RpYywgMiksIG5zbWFsbCA9IDIpLCAKICAiLCBwICIsCiAgaWZlbHNlKHRfYWdlXzQ2JHAudmFsdWUgPCAwLjAwMSwgIjwgMC4wMDEiLAogICAgICAgICBwYXN0ZTAoIj0gIiwgZm9ybWF0KHJvdW5kKHRfYWdlXzQ2JHAudmFsdWUsIDMpLCBuc21hbGwgPSAzKSkpLAogICIpOyBjaGlsZHJlbiBpbiB0aGUgJzctOXknIGFnZSByYW5nZSBkaWQgbm90IGRpZmZlciBzaWduaWZpY2FudGx5IGluIGFnZSBhY3Jvc3MgU3R1ZGllcyAyIChtZWFuIGFnZTogIiwKICBmb3JtYXQocm91bmQodF9hZ2VfNzkkZXN0aW1hdGVbMV0sIDIpLCBuc21hbGwgPSAyKSwgCiAgInkpIGFuZCAzIChtZWFuIGFnZTogIiwKICBmb3JtYXQocm91bmQodF9hZ2VfNzkkZXN0aW1hdGVbMl0sIDIpLCBuc21hbGwgPSAyKSwgCiAgInk7IFdlbGNoJ3MgdCgiLAogIGZvcm1hdChyb3VuZCh0X2FnZV83OSRwYXJhbWV0ZXIsIDIpLCBuc21hbGwgPSAyKSwKICAiKSA9ICIsCiAgZm9ybWF0KHJvdW5kKHRfYWdlXzc5JHN0YXRpc3RpYywgMiksIG5zbWFsbCA9IDIpLCAKICAiLCBwICIsCiAgaWZlbHNlKHRfYWdlXzc5JHAudmFsdWUgPCAwLjAwMSwgIjwgMC4wMDEiLAogICAgICAgICBwYXN0ZTAoIj0gIiwgZm9ybWF0KHJvdW5kKHRfYWdlXzc5JHAudmFsdWUsIDMpLCBuc21hbGwgPSAzKSkpLAogICIpLiAoQSkgVG90YWwgdmFyaWFuY2UgZXhwbGFpbmVkIGJ5IHRoZSBjb21iaW5hdGlvbiBvZiBhbGwgZmFjdG9ycywgZm9yIGVhY2ggc29sdXRpb24gKHRoZW9yZXRpY2FsIHJhbmdlOiAwLTEwMCUpLiAoQikgUHJvcG9ydGlvbiBvZiB0b3RhbCB2YXJpYW5jZSBleHBsYWluZWQgYnkgZWFjaCBmYWN0b3IsIGZvciBlYWNoIHNvbHV0aW9uLiAoQSkgUHJvcG9ydGlvbiBvZiBzaGFyZWQgdmFyaWFuY2UgZXhwbGFpbmVkIGJ5IGVhY2ggZmFjdG9yLCBmb3IgZWFjaCBzb2x1dGlvbi4gQnkgZGVmaW5pdGlvbiwgdGhlIHRvdGFsIHNoYXJlZCB2YXJpYW5jZSBleHBsYWluZWQgZm9yIGVhY2ggc29sdXRpb24gZXF1YWxzIDEwMCUuIERvdHRlZCBsaW5lcyBpbmRpY2F0ZSB0aGUgZXhwZWN0ZWQgdmFsdWUgb2Ygc2hhcmVkIHZhcmlhbmNlIGV4cGxhaW5lZCBpZiBhbGwgb2YgdGhlIGZhY3RvcnMgZm9yIGEgZ2l2ZW4gc29sdXRpb24gd2VyZSBvZiBlcXVhbCBzaXplLiIpLCAyMTApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyIGZpZ3VyZTMuNSwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDksIGZpZy5hc3AgPSAwLjR9CmdnZHJhdyhmaWd1cmUzLjVfY2FwKQpgYGAKCgojIEdlbmVyYWwgZGlzY3Vzc2lvbgoKSW4gZm91ciBsYXJnZS1zY2FsZSBzdHVkaWVzICh0b3RhbCBfTl89YHIgbnJvdyhkMl83OV93aWRlKSArIG5yb3coZDNfNzlfd2lkZSkgKyBucm93KGQzXzQ2X3dpZGUpICsgbnJvdyhkNF80Nl93aWRlKS8yYCBjaGlsZHJlbiBhbmQgYHIgbnJvdyhkMWFfYWRfd2lkZSkgKyBucm93KGQxYl9hZF93aWRlKSArIG5yb3coZDFjX2FkX3dpZGUpICsgbnJvdyhkMWRfYWRfd2lkZSkgKyBucm93KGQyX2FkX3dpZGUpICsgbnJvdyhkM19hZF93aWRlKSArIG5yb3coZDRfYWRfd2lkZSkvMmAgYWR1bHRzKSwgSSBzZXQgb3V0IHRvIGV4cGxvcmUgdGhlIGRldmVsb3BtZW50IG9mIFVTIGNoaWxkcmVuJ3MgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUgYmV0d2VlbiA0LTl5IG9mIGFnZSBhbmQgY29tcGFyZSBpdCB0byB0aGUgcmVwcmVzZW50YXRpb25zIG9mIGFkdWx0cyBpbiB0aGVpciBnZW5lcmFsIGN1bHR1cmFsIGNvbnRleHQuIEluIHRoaXMgY2hhcHRlciwgSSBoYXZlIGZvY3VzZWQgb24gb25lIGFzcGVjdCBvZiB0aGVzZSByZXByZXNlbnRhdGlvbnM6IHRoZSAiY29uY2VwdHVhbCB1bml0cyIgYXZhaWxhYmxlIHRvIHBhcnRpY2lwYW50cyBvZiBkaWZmZXJlbnQgYWdlcyBpbiByZWFzb25pbmcgYWJvdXQgdGhlIG1lbnRhbCBsaXZlcyBvZiBvdGhlciBiZWluZ3MuIAoKU3R1ZGllcyB3aXRoIGFkdWx0cyB1c2luZyBkaWZmZXJlbnQgZXhwZXJpbWVudGFsIGFwcHJvYWNoZXMgKGFza2luZyBwYXJ0aWNpcGFudHMgdG8gYXNzZXNzIHRoZSBtZW50YWwgbGl2ZXMgb2YgZWRnZSBjYXNlcyBvciBhIGRpdmVyc2UgcmFuZ2Ugb2YgdGFyZ2V0IGNoYXJhY3RlcnMpLCB0aGVpciBiZXR3ZWVuLSB2cy4gd2l0aGluLXN1YmplY3RzIGRlc2lnbiwgdGhlIG51bWJlciBhbmQgcmFuZ2Ugb2YgbWVudGFsIGNhcGFjaXRpZXMgaW5jbHVkZWQsIGFuZCB0aGUgcmVzcG9uc2Ugb3B0aW9ucyBhdmFpbGFibGUgdG8gcGFydGljaXBhbnRzIGFsbCBjb252ZXJnZWQgdG8gc3VnZ2VzdCB0aGF0IGFkdWx0cycgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUgYXJlIGFuY2hvcmVkIGJ5IGEgdGhyZWUtd2F5IGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyBvZiB0aGUgQk9EWSwgdGhlIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIG9mIHRoZSBIRUFSVCwgYW5kIHRoZSBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBhYmlsaXRpZXMgb2YgdGhlIE1JTkQuIEVGQSBzb2x1dGlvbnMgY29uc2lzdGVudGx5IHJldmVhbGVkIHRoZXNlIHRocmVlIGNvbmNlcHR1YWwgdW5pdHMsIG5ldmVyIHJldmVhbGVkIGZld2VyIHRoYW4gdGhlc2UgdGhyZWUgdW5pdHMsIGFuZCBvbmx5IHJhcmVseSBzdWdnZXN0ZWQgYWRkaXRpb25hbCBmaW5lci1ncmFpbmVkIGRpc3RpbmN0aW9ucy4gVGhlIGNvbWJpbmF0aW9uIG9mIHRoZXNlIHRocmVlIGNvbmNlcHR1YWwgdW5pdHMgZ2VuZXJhbGx5IGFjY291bnRlZCBmb3IgYSBzdWJzdGFudGlhbCBhbW91bnQgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IHJlc3BvbnNlcyAoYHIgdmFyX3RvdGFsX3N1bSAlPiUgZmlsdGVyKHNhbXBsZSA9PSAiYWR1bHRzIikgJT4lIHN1bW1hcmlzZShtaW4gPSBtaW4odmFsdWUpKSAlPiUgYXMubnVtZXJpYygpICU+JSByb3VuZCgyKSoxMDBgLWByIHZhcl90b3RhbF9zdW0gJT4lIGZpbHRlcihzYW1wbGUgPT0gImFkdWx0cyIpICU+JSBzdW1tYXJpc2UobWF4ID0gbWF4KHZhbHVlKSkgJT4lIGFzLm51bWVyaWMoKSAlPiUgcm91bmQoMikqMTAwYCU7IHNlZSBwcmV2aW91cyBzZWN0aW9uKeKAlHdoaWNoIGlzIHBhcnRpY3VsYXJseSBpbXByZXNzaXZlIGdpdmVuIHRoZSBtYW55IG90aGVyIHBvdGVudGlhbCBpbmZsdWVuY2VzIG9uIHBhcnRpY2lwYW50cycgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucyAoZS5nLiwgdGhlaXIgcmVjb2xsZWN0aW9uIG9mIHNwZWNpZmljIGludGVyYWN0aW9ucyB3aXRoIGVudGl0aWVzIHNpbWlsYXIgdG8gdGhlIHRhcmdldCBjaGFyYWN0ZXIocykgdGhleSB3ZXJlIGFzc2Vzc2luZzsgaW5kaXZpZHVhbCBkaWZmZXJlbmNlcyBpbiB0aGVpciBpbnRlcnByZXRhdGlvbiBvZiBzdWNoIGNvbXBsaWNhdGVkIGNvbmNlcHRzIGFzICJoYXZpbmcgZnJlZSB3aWxsLCIgImJlaW5nIGNvbnNjaW91cywiIG9yICJob2xkaW5nIGJlbGllZnMiKS4gSW4gc3VtLCBJIGNvbnNpZGVyIHRoZXNlIHN0dWRpZXMgdG8gcHJvdmlkZSBzdHJvbmcgZXZpZGVuY2UgdGhhdCBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgYXJlIHJvYnVzdCwgcmVsaWFibGUsIGFuZCBpbXBvcnRhbnQgY29tcG9uZW50cyBvZiB0aGUgdHlwaWNhbCBVUyBhZHVsdCdzIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb24gb2YgbWVudGFsIGxpZmUuIChGb3IgZnVydGhlciBkaXNjdXNzaW9uIG9mIHRoZSBzdWJzZXQgb2YgYWR1bHQgc3R1ZGllcyBJIGhhdmUgbGFiZWxlZCAiU3R1ZHkgMSwiIHdpdGggYSBwYXJ0aWN1bGFyIGZvY3VzIG9uIHRoZSBzb2NpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uY2VwdHVhbCBzdHJ1Y3R1cmUsIHNlZSBXZWlzbWFuIGV0IGFsLiwgMjAxNy4pCgpNZWFud2hpbGUsIGFuYWx5c2VzIG9mIHRoZSBjb25jZXB0dWFsIHVuaXRzIHVuZGVybHlpbmcgX2NoaWxkcmVuJ3NfIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMgKFN0dWRpZXMgMi00KSBzdWdnZXN0ZWQgYm90aCBtZWFuaW5nZnVsIGNvbnRpbnVpdHkgYW5kIHNvbWUgc3Vic3RhbnRpYWwgY2hhbmdlcyBpbiB0aGUgY29uY2VwdHVhbCB1bml0cyB0aGF0IHNlZW0gdG8gYmUgYXZhaWxhYmxlIHRvIGNoaWxkcmVuIGF0IGRpZmZlcmVudCBwb2ludHMgaW4gZGV2ZWxvcG1lbnQuIAoKQm90aCB5b3VuZ2VyIGNoaWxkcmVuICg0LTZ5IG9mIGFnZSkgYW5kIG9sZGVyIGNoaWxkcmVuICg3LTl5IG9mIGFnZSkgdHJlYXRlZCBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBhYmlsaXRpZXMgKE1JTkQpIGFzIGEgZGlzdGluY3QgY29tcG9uZW50IG9mIG1lbnRhbCBsaWZlOiBBYmlsaXRpZXMgdG8gZGV0ZWN0LCBzdG9yZSwgYW5kIHVzZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZW52aXJvbm1lbnQgdHJhdmVsZWQgdG9nZXRoZXIgaW4gdGhlaXIgYXR0cmlidXRpb25zLCBhbmQgd2VyZSBlbmRvcnNlZCBzb21ld2hhdCBpbmRlcGVuZGVudGx5IGZyb20gcGh5c2lvbG9naWNhbCBvciBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcy4gVGhpcyBoZWxkIHRydWUgYWNyb3NzIHN0dWRpZXMgdGhhdCBmZWF0dXJlZCBkaWZmZXJlbnQgZXhwZXJpbWVudGFsIGFwcHJvYWNoZXMgKCJlZGdlIGNhc2UiIHZzLiAiZGl2ZXJzZSBjaGFyYWN0ZXJzIiksIGRlc2lnbnMgKGJldHdlZW4tIHZzLiB3aXRoaW4tc3ViamVjdHMpLCBhbmQgdmFyeWluZyBzZXRzIG9mIG1lbnRhbCBjYXBhY2l0aWVzLiBTdWNoIHJvYnVzdCBjb250aW51aXR5IGFjcm9zcyB0aGlzIHdpZGUgYWdlIHJhbmdlIGlzIHBhcnRpY3VsYXJseSBzdHJpa2luZyBnaXZlbiB0aGUgb3Blbi1lbmRlZCwgZXhwbG9yYXRvcnkgbmF0dXJlIG9mIHRoZXNlIHN0dWRpZXMuIEEgcHJpb3JpLCBmb3IgYW55IG9mIHRoZXNlIHNhbXBsZXMgaXQgc2VlbWVkIHF1aXRlIHBsYXVzaWJsZSB0aGF0IEVGQSB3b3VsZCByZXZlYWwgYSBzdWl0ZSBvZiBoaWdobHkgY29ycmVsYXRlZCAiZXhwZXJpZW50aWFsIiBwZXJjZXB0dWFsIGFiaWxpdGllcyAoZS5nLiwgc2VlaW5nLCBoZWFyaW5nLCBwZXJoYXBzIGFsb25nIHdpdGggZW1vdGlvbmFsIGV4cGVyaWVuY2UpIHRoYXQgd2FzIGRpc3RpbmN0IGZyb20gdGhlIG1vcmUgImNvZ25pdGl2ZSIgb3IgImFnZW50aWMiIGFiaWxpdGllcyAoZS5nLiwgdGhpbmtpbmcsIHJlbWVtYmVyaW5nLCBhcyBpbiBHcmF5IGV0IGFsLiwgMjAwNykuIExpa2V3aXNlLCBpdCBjb3VsZCBoYXZlIGVhc2lseSBiZWVuIHRoZSBjYXNlIHRoYXQgeW91bmdlciBjaGlsZHJlbiBkaWQgbm90IHNoYXJlIGFueSBjb25zZW5zdXMgdmlldyBvZiB3aGljaCBtZW50YWwgY2FwYWNpdGllcyAiZ28gdG9nZXRoZXIiIGluIHRoaXMgZXhwZXJpbWVudGFsIHBhcmFkaWdtLCBpbiB3aGljaCBjYXNlIEVGQSB3b3VsZCBoYXZlIHJldmVhbGVkIG5vIHN0YWJsZSBmYWN0b3Igc3RydWN0dXJlIChpLmUuLCByZXRlbnRpb24gcHJvdG9jb2xzIHdvdWxkIGhhdmUgc3VnZ2VzdGVkIG51bGwsIDEtZmFjdG9yIHNvbHV0aW9ucyBtb3JlIGZyZXF1ZW50bHksIGFuZCB0aGUgImZhY3RvcnMiIHJldmVhbGVkIHdvdWxkIGhhdmUgYmVlbiBtb3JlIGRpZmZpY3VsdCB0byBpbnRlcnByZXQpLiBJbiBsaWdodCBvZiB0aGVzZSBhbHRlcm5hdGl2ZSBwb3NzaWJpbGl0aWVzLCB0aGUgZmFjdCB0aGF0IGEgTUlORC1saWtlIGZhY3RvciBlbWVyZ2VkIGluIGV2ZXJ5IGFnZSBncm91cCBpbiBldmVyeSBzdHVkeSwgYW5kIGluIGVhY2ggY2FzZSB3YXMgaGlnaGx5IHNpbWlsYXIgdG8gdGhlIE1JTkQgZmFjdG9yIG9mIGFkdWx0cyBpbiB0aGF0IGV4cGVyaW1lbnRhbCBwYXJhZGlnbSwgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIHN0cm9uZyBldmlkZW5jZSBmb3IgYSBzdWJzdGFudGlhbCBkZWdyZWUgb2YgY29udGludWl0eSBpbiB0aGlzIGNvbmNlcHR1YWwgdW5pdCBmcm9tIGVhcmx5IGNoaWxkaG9vZCwgd2l0aCBubyBldmlkZW5jZSBvZiBzdWJzdGFudGlhbCBjaGFuZ2UgdGhyb3VnaCBtaWRkbGUgY2hpbGRob29kICh0aG91Z2ggb2YgY291cnNlIGEgZnVsbCB0ZXN0IG9mIGRldmVsb3BtZW50YWwgY29udGludWl0eSB3b3VsZCByZXF1aXJlIGZ1cnRoZXIgc2FtcGxpbmcgYmV0d2VlbiAxMC0xOHkgb2YgYWdlKS4gCgpMaWtlIGFkdWx0cywgaW4gYWRkaXRpb24gdG8gdGhlIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyBvZiB0aGUgTUlORCwgb2xkZXIgY2hpbGRyZW4gKDctOXkgb2YgYWdlKSBtYWRlIGEgZnVydGhlciBkaWZmZXJlbnRpYXRpb24gYmV0d2VlbiB0aGUgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIG9mIHRoZSBCT0RZIHZzLiB0aGUgc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgb2YgdGhlIEhFQVJULiBJbiBvdGhlciB3b3JkcywgdGhlIHNldCBvZiBjb25jZXB0dWFsIHVuaXRzIGF2YWlsYWJsZSB0byA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGluIHRoZXNlIHN0dWRpZXMgYXBwZWFycyB0byBoYXZlIGJlZW4gdmVyeSBzaW1pbGFyIHRvIHRob3NlIGF2YWlsYWJsZSB0byB0aGVpciBhZHVsdCBjb3VudGVycGFydHMuIEluIG9uZSBvZiB0aGUgdHdvIHN0dWRpZXMgd2l0aCB0aGlzIGFnZSBncm91cCAoU3R1ZHkgMiwgYnV0IG5vdCBTdHVkeSAzKSwgYW4gYW5hbHlzaXMgb2YgdGhlIHZhcmlhbmNlIGV4cGxhaW5lZCBieSBlYWNoIG9mIHRoZXNlIGNvbmNlcHR1YWwgdW5pdHMgaGludGVkIGF0IHRoZSBwb3NzaWJpbGl0eSB0aGF0IEhFQVJUIG1heSBsb29tIGVzcGVjaWFsbHkgbGFyZ2UgKGxhcmdlciB0aGFuIEJPRFkgb3IgTUlORCkgaW4gb2xkZXIgY2hpbGRyZW4ncyByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmU7IHRoaXMgaXMgaW4gY29udHJhc3QgdG8gc3R1ZGllcyB3aXRoIGFkdWx0cywgaW4gd2hpY2ggdGhlIEhFQVJUIGZhY3RvciBuZXZlciBleHBsYWluZWQgbW9yZSBvZiB0aGUgdmFyaWFuY2UgdGhhbiB0aGUgQk9EWSBmYWN0b3IgKHNlZSBwcmV2aW91cyBzZWN0aW9uKS4gVGhpcyBjb3VsZCBiZSBpbnRlcnByZXRlZCBhcyBzb21ldGhpbmcgb2YgYSByZWxpYyBmcm9tIGEgZGV2ZWxvcG1lbnRhbGx5IGVhcmxpZXIgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbiAoaW4gd2hpY2ggY2FwYWNpdGllcyByZWxhdGVkIHRvIEJPRFkgYW5kIEhFQVJUIHdlcmUgbW9yZSBpbnRlZ3JhdGVkOyBzZWUgbmV4dCBwYXJhZ3JhcGgpLCB3aGljaCBhdCBsZWFzdCBzb21lIG9mIHRoZSB5b3VuZ2VyIGNoaWxkcmVuIGluIHRoZXNlIDctIHRvIDkteWVhci1vbGQgc2FtcGxlcyBtYXkgaGF2ZSBoZWxkIHVudGlsIHJlY2VudGx5IChvciBtYXkgaGF2ZSBjb250aW51ZWQgdG8gaG9sZCBhdCB0aGUgdGltZSBvZiB0aGUgZXhwZXJpbWVudCkuIEhvd2V2ZXIsIHNpbmNlIHRoaXMgd2FzIG9ubHkgYXBwYXJlbnQgaW4gb25lIG9mIHRoZSB0d28gc3R1ZGllcyB3aXRoIHRoaXMgYWdlIGdyb3VwLCBJIHdvdWxkIHVyZ2UgdGhlIHJlYWRlciB0byBpbnRlcnByZXQgdGhpcyBmaW5kaW5nIHdpdGggY2F1dGlvbiBhbmQgZm9jdXMgcHJpbWFyaWx5IG9uIHRoZSBvdmVyd2hlbG1pbmcgc2ltaWxhcml0eSBiZXR3ZWVuIHRoZSBzZXRzIG9mIGNvbmNlcHR1YWwgdW5pdHMgdGhhdCBzZWVtIHRvIGNoYXJhY3Rlcml6ZSB0aGUgcmVwcmVzZW50YXRpb25zIG9mIG9sZGVyIGNoaWxkcmVuIGFuZCBhZHVsdHMuCgpBbW9uZyB5b3VuZ2VyIGNoaWxkcmVuLCBzaW1pbGFyaXRpZXMgdG8gYWR1bHRzJyBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9ucyB3ZXJlIGV2aWRlbnQsIGJ1dCBtb3JlIHRlbnVvdXMuIEluIGJvdGggb2YgdGhlIHN0dWRpZXMgd2l0aCB0aGlzIGFnZSBncm91cCAoNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSAzOyA0LSB0byA1LXllYXItb2xkIGNoaWxkcmVuIGluIFN0dWR5IDQpLCByZXRhaW5pbmcgdGhyZWUgZmFjdG9ycyByZXZlYWxlZCBjb25jZXB0dWFsIHVuaXRzIHRoYXQgd2VyZSBhdCBsZWFzdCBtb2RlcmF0ZWx5IHNpbWlsYXIgdG8gYWR1bHRzJyBCT0RZIGFuZCBIRUFSVCwgc3VnZ2VzdGluZyB0aGF0IHRoaXMgZGlzdGluY3Rpb24gaXMgbmFzY2VudCwgaWYgbm90IGZ1bGx5IG1hdHVyZSwgYW1vbmcgeW91bmcgY2hpbGRyZW4uIFNpbWlsYXJpdGllcyBiZXR3ZWVuIHlvdW5nIGNoaWxkcmVuIGFuZCBhZHVsdHMgd2VyZSBlc3BlY2lhbGx5IHN0cmlraW5nIGluIFN0dWR5IDQsIHdoaWNoIHdhcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gb2ZmZXIgdGhlIGJlc3QgY2hhbmNlIG9mIGRpc2NvdmVyaW5nIHRoaXMgYWR1bHQtbGlrZSByZXByZXNlbnRhdGlvbiBhbW9uZyBwcmVzY2hvb2wtYWdlIGNoaWxkcmVuLiBIb3dldmVyLCBldmVuIGluIHRoaXMgImJlc3Qtc2hvdCIgc2NlbmFyaW8sIHN1YnN0YW50aWFsIGRpZmZlcmVuY2VzIGVtZXJnZWQ6IEZvciBleGFtcGxlLCB0aGUgY2Fub25pY2FsIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIF9mZWVsIGhhcHB5XyBhbmQgX2hhdGUgc29tZW9uZV8gd2VyZSBtdWNoIG1vcmUgc3Ryb25nbHkgYXNzb2NpYXRlZCB3aXRoIGNoaWxkcmVuJ3MgTUlORCBmYWN0b3IgdGhhbiB0aGVpciBIRUFSVCBmYWN0b3IuIChTZWUgU3R1ZHkgNCByZXN1bHRzIGZvciBtb3JlIGV4YW1wbGVzIG9mIGRpZmZlcmVuY2VzIGJldHdlZW4gY2hpbGRyZW4gYW5kIGFkdWx0cyBpbiB0aGVpciBFRkEgc29sdXRpb25zLikgCgpNb3Jlb3ZlciwgaW4gYm90aCBzYW1wbGVzIG9mIHlvdW5nZXIgY2hpbGRyZW4sIGRpZmZlcmVudCBmYWN0b3IgcmV0ZW50aW9uIHByb3RvY29scyBzdWdnZXN0ZWQgcmV0YWluaW5nIGRpZmZlcmVudCBudW1iZXJzIG9mIGZhY3RvcnM7IHRoaXMgd2FzIG5vdCB0aGUgY2FzZSBpbiBlaXRoZXIgb2YgdGhlIHNhbXBsZXMgb2Ygb2xkZXIgY2hpbGRyZW4sIGFuZCB0aGlzIGZhY3QgYWxvbmUgcHJvdmlkZXMgc29tZSBpbmRpY2F0aW9uIHRoYXQgeW91bmdlciBjaGlsZHJlbidzIHJlcHJlc2VudGF0aW9ucyB3ZXJlIGxlc3MgaWRlbnRpZmlhYmxlIGFuZCBsZXNzIHJvYnVzdC4gQmV5b25kIHRoaXMsIGluIHNldmVyYWwgb2YgdGhlIEVGQSBzb2x1dGlvbnMgb2YgeW91bmdlciBjaGlsZHJlbidzIHJlc3BvbnNlcywgdGhlaXIgcmVwcmVzZW50YXRpb25zIGFwcGVhcmVkIHRvIGJlIG5vdGFibHkgX3VuXy1hZHVsdC1saWtlLiBGb3IgZXhhbXBsZSwgaW4gdGhlIHR3by1mYWN0b3Igc29sdXRpb24gZm9yIHlvdW5nZXIgY2hpbGRyZW4gaW4gU3R1ZHkgMywgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIGFuZCBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyBhcHBlYXJlZCB0byBiZSBpbnRlZ3JhdGVkIGludG8gYSBzaW5nbGUgY29uY2VwdHVhbCB1bml0IHRoYXQgSSBsYWJlbGVkIEJPRFktSEVBUlQuIEluIHRoZSB0aHJlZS1mYWN0b3Igc29sdXRpb24gZm9yIHRoaXMgc3R1ZHksIGEgZGlzdGluY3Rpb24gYmV0d2VlbiBwb3NpdGl2ZWx5LXZhbGVuY2VkIHZzLiBuZWdhdGl2ZWx5LXZhbGVuY2VkIGFiaWxpdGllcyBzZWVtZWQgdG8gYmV0dGVyIGNoYXJhY3Rlcml6ZSBjaGlsZHJlbidzIHJlcHJlc2VudGF0aW9ucyB0aGFuIGEgZGlzdGluY3Rpb24gYmV0d2VlbiAicGh5c2lvbG9naWNhbCIgKEJPRFkpIHZzLiAic29jaWFsLWVtb3Rpb25hbCIgYWJpbGl0aWVzIChIRUFSVCkuIEFuZCBpbiB0aGUgZm91ci1mYWN0b3Igc29sdXRpb24gZm9yIHlvdW5nZXIgY2hpbGRyZW4gaW4gU3R1ZHkgNCwgY2Fub25pY2FsIEhFQVJUIGFiaWxpdGllcyB3ZXJlIHNwbGl0IGFjcm9zcyBhIG1vcmUgSEVBUlQtbGlrZSB2cy4gYSBtb3JlIE1JTkQtbGlrZSBmYWN0b3IsIHdoaWxlIGNhbm9uaWNhbCBCT0RZIGFiaWxpdGllcyB3ZXJlIGFsc28gc3BsaXQgYWNyb3NzIHR3byBCT0RZLWxpa2UgZmFjdG9ycyAoc2VlIHByZXZpb3VzIHNlY3Rpb25zIGZvciBkZXRhaWxzKS4gVGFrZW4gdG9nZXRoZXIsIHRoZXNlIHR3byBzdHVkaWVzIGRvIG5vdCBwYWludCBhIGNsZWFyIHBpY3R1cmUgb2YgYSBzaW5nbGUsIHJvYnVzdCBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9uIGFtb25nIDQtIHRvIDYteWVhci1vbGQgY2hpbGRyZW47IGluc3RlYWQsIHRoZSB2YXJpYWJpbGl0eSBhY3Jvc3Mgc3R1ZGllcyBhbmQgYW5hbHlzaXMgZGVjaXNpb25zIHN1Z2dlc3RzIGEgbGFjayBvZiByb2J1c3RuZXNzLCBhbmQgdGhlIHZhcmlvdXMgZGl2ZXJnZW5jZXMgZnJvbSBhZHVsdHMnIHJlc3BvbnNlIHBhdHRlcm5zIGhpbnQgYXQgbWFueSBkaWZmZXJlbnQgd2F5cyB0aGF0IHlvdW5nZXIgY2hpbGRyZW4ncyB1bmRlcnN0YW5kaW5nIG9mIG1lbnRhbCBsaWZlIG1pZ2h0IGNoYW5nZSBhbmQgZXZvbHZlIG92ZXIgZWFybHkgY2hpbGRob29kLgoKCiMgQ2hhcHRlciBjb25jbHVzaW9uCgpJbiB0aGlzIGNoYXB0ZXIsIEkgZXhwbG9yZWQgb25lIGFzcGVjdCBvZiBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZSBhbW9uZyBVUyBjaGlsZHJlbiBhbmQgYWR1bHRzOiBUaGUgZnVuZGFtZW50YWwgY29uY2VwdHVhbCB1bml0cyBhdmFpbGFibGUgdG8gcGVvcGxlIGFzIHRoZXkgYXNzZXNzIGFuZCByZWFzb24gYWJvdXQgdGhlIG1lbnRhbCBsaXZlcyBvZiB2YXJpb3VzIGJlaW5ncyBpbiB0aGUgd29ybGQuIFN0dWRpZXMgMi00IGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGZvbGxvd2luZyB0aGVvcnk6IE92ZXIgdGhlIGNvdXJzZSBvZiBlYXJseSBjaGlsZGhvb2QsIHRoZSBzZXQgb2YgY29uY2VwdHVhbCB1bml0cyBhdmFpbGFibGUgdG8gY2hpbGRyZW4gZXhwYW5kcyBpbiBudW1iZXIgYW5kIHRoZSBpbmRpdmlkdWFsIGNvbmNlcHR1YWwgdW5pdHMgKHBhcnRpY3VsYXJseSBCT0RZIGFuZCBIRUFSVCkgYXJlIHJlZmluZWQgaW4gdGhlaXIgY29udGVudCBhbmQgdGhlaXIgc2l6ZSwgcmVhY2hpbmcgYW4gYWR1bHQtbGlrZSBzdGF0ZSAoQk9EWSwgSEVBUlQsIGFuZCBNSU5EKSBzb21lIHRpbWUgaW4gdGhlIGVhcmx5IGVsZW1lbnRhcnkgc2Nob29sIHllYXJzLiAKCk9mIGNvdXJzZSwgdGhpcyBpcyBub3QgdGhlIG9ubHkgcG9zc2libGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIHBhdHRlcm4gb2YgcmVzdWx0cyBwcmVzZW50ZWQgaGVyZTsgZm9sbG93LXVwIHN0dWRpZXMgdGhhdCBwcm92aWRlIHNuYXBzaG90cyBvZiBhIGxhcmdlciBudW1iZXIgb2YgbmFycm93ZXIgYWdlIHJhbmdlcywgZnVydGhlciBhbmFseXNlcyB0aGF0IGFpbSB0byBjYXB0dXJlIHRoaXMgYXNwZWN0IG9mIGNvbmNlcHR1YWwgZGV2ZWxvcG1lbnQgbW9yZSBjb250aW51b3VzbHksIGFuZCBmdXJ0aGVyIHN0dWRpZXMgZW1wbG95aW5nIGRpZmZlcmVudCBkZXNpZ25zIChlLmcuLCB0byBjYXB0dXJlIGNvbmNlcHR1YWwgY2hhbmdlIGF0IHRoZSBsZXZlbCBvZiB0aGUgaW5kaXZpZHVhbCkgb3IgZW1wbG95IGRpZmZlcmVudCBleHBlcmltZW50YWwgcGFyYWRpZ21zIChlLmcuLCB0byB0ZXN0IHRoZSBoeXBvdGhlc2lzIHRoYXQgeW91bmdlciBjaGlsZHJlbiBjb25zaWRlciBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgYW5kIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHRvIGJlIG1vcmUgc2ltaWxhciBvciByZWxhdGVkIHRvIGVhY2ggb3RoZXIgdGhhbiBkbyBvbGRlciBjaGlsZHJlbiBvciBhZHVsdHMpIGNvdWxkIHByb3ZpZGUgY29udmVyZ2luZyBldmlkZW5jZSBvciBjb3VsZCBjaGFsbGVuZ2UgdGhpcyB0aGVvcmV0aWNhbCBpbnRlcnByZXRhdGlvbi4gVGhlIHByaW1hcnkgcm9sZSBvZiB0aGUgc3R1ZGllcyBhbmQgYW5hbHlzZXMgZGlzY3Vzc2VkIGhlcmUgaGFzIGJlZW4gdG8gaW5zcGlyZSB0aGUgaHlwb3RoZXNpcyBzdGF0ZWQgaW4gdGhlIHByZXZpb3VzIHBhcmFncmFwaCBhbmQgdG8gdGhlIGZvdW5kYXRpb24gZm9yIGZ1dHVyZSB0ZXN0cyBvZiB0aGlzIGh5cG90aGVzaXMsIGluIHR1cm4gcmVmaW5pbmcgYSBnZW5lcmFsIHRoZW9yeSBvZiBjb25jZXB0dWFsIGRldmVsb3BtZW50IGluIHRoaXMgZG9tYWluLiAgCgpJbiB0aGUgbmV4dCBjaGFwdGVyLCBJIGFwcGx5IHRoZSBzYW1lIGV4cGxvcmF0b3J5IHNwaXJpdCB0byBhbm90aGVyIGFzcGVjdCBvZiB0aGVzZSBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9uczogdGhlIF9yZWxhdGlvbnNoaXBzIGFtb25nXyB0aGVzZSBjb25jZXB0dWFsIHVuaXRzLgoKYGBge3J9CiMgZXhwb3J0IEVGQXM6IGludGVyc3BlcnNlZCBhYm92ZQoKIyBleHBvcnQgZmFjdG9yIG5hbWVzCiMgc3R1ZHkgMQpzYXZlUkRTKGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxYV9hZCwgCiAgICAgICAgZmlsZSA9ICIuL2ZhY3Rvcl9uYW1lcy9mYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWFfYWQiKQpzYXZlUkRTKGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxYl9hZCwgCiAgICAgICAgZmlsZSA9ICIuL2ZhY3Rvcl9uYW1lcy9mYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWJfYWQiKQpzYXZlUkRTKGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxY19hZCwgCiAgICAgICAgZmlsZSA9ICIuL2ZhY3Rvcl9uYW1lcy9mYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWNfYWQiKQpzYXZlUkRTKGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QxZF9hZCwgCiAgICAgICAgZmlsZSA9ICIuL2ZhY3Rvcl9uYW1lcy9mYWN0b3JfbmFtZXNfZWZhX3dkbV9kMWRfYWQiKQoKIyBzdHVkeSAyCnNhdmVSRFMoZmFjdG9yX25hbWVzX2VmYV93ZG1fZDJfYWQsIAogICAgICAgIGZpbGUgPSAiLi9mYWN0b3JfbmFtZXMvZmFjdG9yX25hbWVzX2VmYV93ZG1fZDJfYWQiKQpzYXZlUkRTKGZhY3Rvcl9uYW1lc19lZmFfcGFyX2QyX2FkLCAKICAgICAgICBmaWxlID0gIi4vZmFjdG9yX25hbWVzL2ZhY3Rvcl9uYW1lc19lZmFfcGFyX2QyX2FkIikKc2F2ZVJEUyhmYWN0b3JfbmFtZXNfZWZhX3dkbV9kMl83OSwgCiAgICAgICAgZmlsZSA9ICIuL2ZhY3Rvcl9uYW1lcy9mYWN0b3JfbmFtZXNfZWZhX3dkbV9kMl83OSIpCgojIHN0dWR5IDMKc2F2ZVJEUyhmYWN0b3JfbmFtZXNfZWZhX3dkbV9kM19hZCwgCiAgICAgICAgZmlsZSA9ICIuL2ZhY3Rvcl9uYW1lcy9mYWN0b3JfbmFtZXNfZWZhX3dkbV9kM19hZCIpCnNhdmVSRFMoZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNzksIAogICAgICAgIGZpbGUgPSAiLi9mYWN0b3JfbmFtZXMvZmFjdG9yX25hbWVzX2VmYV93ZG1fZDNfNzkiKQpzYXZlUkRTKGZhY3Rvcl9uYW1lc19lZmFfd2RtX2QzXzQ2LCAKICAgICAgICBmaWxlID0gIi4vZmFjdG9yX25hbWVzL2ZhY3Rvcl9uYW1lc19lZmFfd2RtX2QzXzQ2IikKc2F2ZVJEUyhmYWN0b3JfbmFtZXNfZWZhX3Bhcl9kM180NiwgCiAgICAgICAgZmlsZSA9ICIuL2ZhY3Rvcl9uYW1lcy9mYWN0b3JfbmFtZXNfZWZhX3Bhcl9kM180NiIpCgojIHN0dWR5IDQKc2F2ZVJEUyhmYWN0b3JfbmFtZXNfZWZhX3dkbV9kNF9hZCwgCiAgICAgICAgZmlsZSA9ICIuL2ZhY3Rvcl9uYW1lcy9mYWN0b3JfbmFtZXNfZWZhX3dkbV9kNF9hZCIpCnNhdmVSRFMoZmFjdG9yX25hbWVzX2VmYV9wYXJfZDRfNDYsIAogICAgICAgIGZpbGUgPSAiLi9mYWN0b3JfbmFtZXMvZmFjdG9yX25hbWVzX2VmYV9wYXJfZDRfNDYiKQpzYXZlUkRTKGZhY3Rvcl9uYW1lc19lZmFfd2RtX2Q0XzQ2LCAKICAgICAgICBmaWxlID0gIi4vZmFjdG9yX25hbWVzL2ZhY3Rvcl9uYW1lc19lZmFfd2RtX2Q0XzQ2IikKYGBgCgo=